我需要在python脚本上运行一个大型构建脚本(bash命令)。我将它作为一个大字符串接收,每行由\ n分割。所以,我需要分别执行每一行。
首先,我尝试使用subprocess.Popen()来执行它们。但问题是:在每一行之后,进程终止并且所有环境变量都丢失。
问题不是等待命令完成另一个命令,我需要在同一个shell上执行所有命令。
到目前为止,我发现的唯一解决方案是将所有命令保存为sh文件(例如build.sh)并在python上执行。
我不想使用此approuch,因为我希望能够更好地控制每次执行。
有没有办法在同一个进程上逐个执行这些命令?
任何其他解决方案都会很好。
答案 0 :(得分:3)
你想要的绝对有点奇怪,但可以使用烟斗。
from subprocess import PIPE, Popen
p = Popen(['bash'], stdin=PIPE, stdout=PIPE)
p.stdin.write('echo hello world\n')
print(p.stdout.readline())
# Check a return code
p.stdin.write('echo $?\n')
if p.stdout.readline().strip() ⩵ '0':
print("Command succeeded")
p.stdin.write('echo bye world\n')
# Close input and wait for bash to exit
stdout, stderr = p.communicate()
print(stdout)
答案 1 :(得分:0)
调用shell时,os会启动一个新进程,除非你在python中有一个shell解释器。
在同一个过程中执行此操作的唯一可能性是直接使用python模拟所有步骤。
更好的方法是接受限制,自己调用外部进程并等待脚本终止受控制。例如是例如在这里:python to wait for shell command to complete