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()
也可以使用,例如ls
和pwd
,但不起作用export
。
.run()
是在Python 3.5中添加的(以防您不认识它),但我也尝试了使用.call()
和进行上述操作,但.Popen()
结果没有变化。
我知道我可以os.environ['FOO'] = "BAR"
使用来在python中设置环境变量,但是我将在项目中大量使用shell命令,并且我希望我需要将多个命令串在一起,这将使的使用export
变得比容易os.environ
。
我的项目将在Linux上运行,这就是我的计算机运行的环境。
它工作正常;但是,变量设置仅存在于子流程中。您不能从孩子那里影响本地过程的环境。
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
不修改当前环境。