运行 'export' 使用 Python 的命令 'subprocess' 不起作用
Running 'export' command with Pythons 'subprocess' does not work
subprocess.run('export FOO=BAR', shell=True)
这根本行不通,我不知道为什么。
我想做的就是从我的 python (3.5.1) 脚本中设置一个环境变量,当我 运行 上述行时,没有任何反应。没有报错,我自己查看环境变量的时候也没有设置。
其他 shell 命令与 subprocess.run()
做 工作,例如 ls
和 pwd
,但不是 export
.
.run()
是在 Python 3.5 中添加的(以防你不认识它),但我也尝试过使用 .call()
和 .Popen()
,结果没有变化。
我知道我可以在 python 和 os.environ['FOO'] = "BAR"
中设置环境变量,但我会在我的项目中大量使用 shell 命令,我希望我会需要将多个命令串在一起,这将使使用 export
比 os.environ
.
更容易
我的项目将 运行 运行在 Linux 上,我的机器 运行 正在运行。
工作正常;但是,变量设置仅存在于子流程中。您不能从子进程影响本地进程的环境。
os.environ
是正确的解决方案,因为它更改了本地进程的环境,并且这些更改将被以 subprocess.run
.
启动的任何进程继承
您还可以将 env
参数用于 run
:
subprocess.run(["cmdname", "arg1", "arg number 2"], env=dict(FOO='BAR', **os.environ))
这会在包含 FOO=BAR
的修改环境中运行命令,而不修改当前环境。
subprocess.run('export FOO=BAR', shell=True)
这根本行不通,我不知道为什么。
我想做的就是从我的 python (3.5.1) 脚本中设置一个环境变量,当我 运行 上述行时,没有任何反应。没有报错,我自己查看环境变量的时候也没有设置。
其他 shell 命令与 subprocess.run()
做 工作,例如 ls
和 pwd
,但不是 export
.
.run()
是在 Python 3.5 中添加的(以防你不认识它),但我也尝试过使用 .call()
和 .Popen()
,结果没有变化。
我知道我可以在 python 和 os.environ['FOO'] = "BAR"
中设置环境变量,但我会在我的项目中大量使用 shell 命令,我希望我会需要将多个命令串在一起,这将使使用 export
比 os.environ
.
我的项目将 运行 运行在 Linux 上,我的机器 运行 正在运行。
工作正常;但是,变量设置仅存在于子流程中。您不能从子进程影响本地进程的环境。
os.environ
是正确的解决方案,因为它更改了本地进程的环境,并且这些更改将被以 subprocess.run
.
您还可以将 env
参数用于 run
:
subprocess.run(["cmdname", "arg1", "arg number 2"], env=dict(FOO='BAR', **os.environ))
这会在包含 FOO=BAR
的修改环境中运行命令,而不修改当前环境。