Python 运行';出口';命令与蟒蛇';子流程';不起作用
这根本不起作用,我也不知道为什么 我所要做的就是从python(3.5.1)脚本中设置一个环境变量,当我运行上面的代码行时,什么也没有发生。没有出现错误,当我自己检查环境变量时,它还没有被设置 带有Python 运行';出口';命令与蟒蛇';子流程';不起作用,python,bash,shell,command,subprocess,Python,Bash,Shell,Command,Subprocess,这根本不起作用,我也不知道为什么 我所要做的就是从python(3.5.1)脚本中设置一个环境变量,当我运行上面的代码行时,什么也没有发生。没有出现错误,当我自己检查环境变量时,它还没有被设置 带有subprocess.run()的其他shell命令可以工作,例如ls和pwd,但不能export .run()是在Python3.5中添加的(如果您不认识它的话),但是我也用.call()和.Popen()尝试了上面这一行,结果没有变化 我知道我可以在python中使用os.environ['FOO
subprocess.run()
的其他shell命令可以工作,例如ls
和pwd
,但不能export
.run()
是在Python3.5中添加的(如果您不认识它的话),但是我也用.call()
和.Popen()
尝试了上面这一行,结果没有变化
我知道我可以在python中使用os.environ['FOO']=“BAR”
设置环境变量,但我将在我的项目中大量使用shell命令,我希望我需要将多个命令串在一起,这将使使用export
比os.environ
更容易
我的项目将在Linux上运行,我的机器就是在Linux上运行的;但是,变量设置仅存在于子流程中。不能从子进程影响本地进程的环境
os.environ
是正确的解决方案,因为它更改了本地进程的环境,并且这些更改将被以子进程.run启动的任何进程继承
您还可以使用env
参数运行run
:
subprocess.run('export FOO=BAR', shell=True)
这将在包含FOO=BAR
的已修改环境中运行命令,而不修改当前环境。Ahhh。那么,这是我使用os.environ
的唯一选择,还是我还能做些什么呢?我不知道你为什么这么反对使用os.environ
。这相当于在shell脚本中使用shell的内置export
命令;我相信将export
添加到我需要执行的命令列表中会比在单独的python函数中执行更容易。不过没关系,我能想出办法。感谢您的回答,它解释了为什么它没有像我期望的那样工作:)您可以使用dict(os.environ,FOO='BAR')
而不是dict(FOO='BAR',**os.environ)
思考:每个子进程.run(shell=True)
启动一个新的shell。打开两个端子,在一个端子中键入export FOO=BAR
,在另一个端子中键入echo$FOO
(运行单独外壳的第二个端子将看不到新的$FOO
值)。这也是为什么cd
是一个shell内置的原因(因为它更改了当前进程的工作目录,如果它是一个单独的程序,那么cd
将不得不更改无法执行的父进程环境(正常情况下))。看见
subprocess.run(["cmdname", "arg1", "arg number 2"], env=dict(FOO='BAR', **os.environ))