如何打电话/python脚本中的home/test.sh文件

如何打电话/python脚本中的home/test.sh文件,python,subprocess,Python,Subprocess,我有一个名为的文件/home/test.sh(第一个和/之间的空间是有意的),其中包含一些环境变量。我需要加载此文件并运行.py。如果我首先在Linux服务器上手动运行该命令,然后运行python脚本,它将生成所需的输出。但是,我想调用/home/test.sh从python中加载配置文件并运行其余代码。如果未加载此配置文件,则运行python脚本并将0作为输出 电话 subprocess.call('. /home/test.sh',shell=True) 运行正常,但Linux终端上没有加

我有一个名为
的文件/home/test.sh
(第一个
/
之间的空间是有意的),其中包含一些环境变量。我需要加载此文件并运行
.py
。如果我首先在Linux服务器上手动运行该命令,然后运行python脚本,它将生成所需的输出。但是,我想调用
/home/test.sh
从python中加载配置文件并运行其余代码。如果未加载此配置文件,则运行python脚本并将0作为输出

电话

subprocess.call('. /home/test.sh',shell=True)
运行正常,但Linux终端上没有加载配置文件以执行python代码并提供所需的输出


有人能帮忙吗?

环境变量不是由父进程直接继承的,这就是为什么您的简单方法不起作用的原因

如果您试图获取在
test.sh
中设置的环境变量,那么您可以做的一件事是在子shell中使用
env
在脚本源代码之后将它们写入stdout,然后在Python中解析这些变量并在本地进行设置

如果
test.sh
本身不写入任何输出,下面的代码将正常工作。(如果是这样,那么您可以做的就是在找到它之后,在运行
env
之前,在Python代码中,去掉分隔符字符串和它之前的所有内容,然后再对它进行处理。)

同样值得考虑的是,如果每次运行任何python代码之前都要设置一些环境变量,那么一个选项就是从shell脚本包装器中获取
test.sh
,而不是在python中设置它们:

#!/bin/sh
. /home/test.sh
exec "/path/to/your/python/script $@"

然后,当您想要运行Python代码时,您可以运行包装器。

test.sh是否打印任何内容或只是设置环境变量?我的想法是,如果它不打印任何内容,您可以运行一个shell命令来运行它,然后运行
env
,然后您可以在python中捕获该输出,并使用它在python中设置环境变量。如果真正的用例是设置env变量,创建一个文件.env并添加所有的env变量。关于提取env变量,我只想指出,你不可能运行一个Python脚本来更改终端环境中的环境变量。也许你没想到,但我只是想指出这一点,以确保这不是你想要做的。我之所以担心,是因为命令
subprocess.call('./home/test.sh,shell=True)中有“.”
。这表明您可能正试图改变Python运行的环境。这是行不通的。@Raj如果这已经回答了你的问题(你说它对你有用),但是你现在有了额外的要求,那么如果你需要帮助,那么要做的就是问另一个问题。我相信它将允许您每90分钟问一个问题。谢谢alani。它使用您共享的子流程脚本工作,但我面临的另一个挑战是我需要加载另一个.sh(profile/environment变量)以获得输出。目前,它加载了下面的一个文件,为服务器提供了一个输出,但需要加载另一个概要文件(.sh),以获取python脚本中服务器的输出。因为它提供了我所期望的完整输出。任何帮助都将不胜感激?嗨@Raj,这就是我问另一个问题的意思——希望我自己或其他人能回答。如果这个问题有助于澄清你的下一个问题,你可以将它作为问题的一部分链接到这个问题。但是很抱歉,我不打算在这个问题中尝试回答这个问题。好的,我会的。它起作用了,会产生另一个问题。我已经产生了另一个问题。
#!/bin/sh
. /home/test.sh
exec "/path/to/your/python/script $@"