【发布时间】:2017-05-03 21:05:43
【问题描述】:
我需要在 python 脚本上运行一个大型构建脚本(bash 命令)。我将它作为一个大字符串接收,并且每一行都由 \n 分隔。所以,我需要分别执行每一行。
起初,我尝试使用subprocess.Popen() 来执行它们。但问题是:在每一行之后,进程都会终止并且所有的环境变量都丢失了。
问题不是等待一个命令完成再执行另一个命令,我需要它们都在同一个 shell 上执行。
目前我发现的唯一解决方案是将所有这些命令保存为 sh 文件(例如 build.sh)并在 python 上执行。
我不想使用这种方法,因为我想对每次执行有更多的控制权。
有没有办法在同一个进程上,一个一个地执行这些命令?
任何其他解决方案也不错。
【问题讨论】:
-
您可以使用
subprocess.Popen()启动一个shell,然后将命令提供给它的标准输入。 -
@jasonharper 你的意思是从 Popen 获取输出并直接添加到另一个 Popen 作为标准输入?但是环境变量呢?我怎样才能保留它们?
-
只有一个
Popen,可能运行“/bin/sh”。一个接一个地给它你的命令;相同的 shell 仍在运行,因此它将保持其环境变量。
标签: python python-2.7 subprocess