使用Python的“子进程”运行“导出”命令不起作用

99l*_*ves 2 python bash shell command subprocess

subprocess.run('export FOO=BAR', shell=True)
Run Code Online (Sandbox Code Playgroud)

这根本行不通,我也不知道为什么。

我想做的所有事情都是通过python(3.5.1)脚本设置环境变量的,当我运行上述代码时,什么也没发生。没有错误出现,并且当我自己检查环境变量时,尚未设置它。

其他的shell命令subprocess.run() 可以使用,例如lspwd,但不起作用export

.run()是在Python 3.5中添加的(以防您不认识它),但我也尝试了使用.call()和进行上述操作,但.Popen()结果没有变化。

我知道我可以os.environ['FOO'] = "BAR"使用来在python中设置环境变量,但是我将在项目中大量使用shell命令,并且我希望我需要将多个命令串在一起,这将使的使用export变得比容易os.environ

我的项目将在Linux上运行,这就是我的计算机运行的环境。

che*_*ner 6

它工作正常;但是,变量设置仅存在于子流程中。您不能从孩子那里影响本地过程的环境。

os.environ是正确的解决方案,因为它会更改本地进程的环境,并且这些更改将由以开头的任何进程继承subprocess.run

您还可以将env参数用于run

subprocess.run(["cmdname", "arg1", "arg number 2"], env=dict(FOO='BAR', **os.environ))
Run Code Online (Sandbox Code Playgroud)

这将在修改后的环境中运行该命令,包括FOO=BAR不修改当前环境。