【发布时间】:2016-09-13 11:44:36
【问题描述】:
subprocess.run('export FOO=BAR', shell=True)
这根本行不通,我不知道为什么。
我要做的就是从我的 python (3.5.1) 脚本中设置一个环境变量,当我运行上面的行时,什么也没有发生。没有报错,当我自己检查环境变量时,还没有设置。
其他带有subprocess.run() 的shell 命令do 工作,例如ls 和pwd,但不是export。
.run() 是在 Python 3.5 中添加的(以防你不认识它),但我也尝试了上面的行与 .call() 和 .Popen(),结果没有变化。
我知道我可以使用os.environ['FOO'] = "BAR" 在 python 中设置环境变量,但我会在我的项目中大量使用 shell 命令,并且我希望我需要将多个命令串在一起,这将使得使用 @ 987654331@ 比os.environ 容易。
我的项目将在 Linux 上运行,这就是我的机器所运行的。
【问题讨论】:
-
想想:每个
subprocess.run(shell=True)都会启动一个新的shell。打开两个终端并在一个终端中键入export FOO=BAR,在另一个终端中键入echo $FOO(运行单独 shell 的第二个终端将看不到新的$FOO值)。这与cd是内置shell 的原因相同(因为它会更改当前进程的工作目录,如果它是一个单独的程序,那么cd将不得不更改父进程的环境——这不能完成(通常))。见How do I set the working directory of the parent process?
标签: python bash shell command subprocess