Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行';出口';命令与蟒蛇';子流程';不起作用_Python_Bash_Shell_Command_Subprocess - Fatal编程技术网

Python 运行';出口';命令与蟒蛇';子流程';不起作用

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

这根本不起作用,我也不知道为什么

我所要做的就是从python(3.5.1)脚本中设置一个环境变量,当我运行上面的代码行时,什么也没有发生。没有出现错误,当我自己检查环境变量时,它还没有被设置

带有
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))