我正在使用python执行shell命令。它运行正常,但是当我尝试执行多个命令时,它会在不同的进程中执行。 例如:
1. set NAME=XYZ
2. calabash-android run myApp.apk
我正在执行这两个命令,使用以下代码(命令分配给变量bash_cmd):
f_handle = open('test_output.txt','w+')
process = subprocess.Popen(bash_cmd, shell=True, stdout=sys.stdout)
process.wait()
f_handle.close()
由于每次都会创建不同的进程,因此无法访问上一个命令中设置的NAME。我可以写一个批处理文件,但是变量NAME的值也会动态变化。我希望这两个命令在同一个进程中执行。
有没有办法在python中批处理这些命令,或者可能加入子进程。请帮忙!!
答案 0 :(得分:1)
每个subprocess.Popen
都会创建一个新流程。如果你想在同一个shell中执行几个命令,那么你可以一次性传递它们:
from subprocess import check_call
check_call("\n".join(shell_commands), shell=True)
你也可以启动一个shell进程并通过它的stdin逐个提供命令:
from subprocess import Popen, PIPE
shell = Popen("/bin/sh", stdin=PIPE, bufsize=1)
for shell_command in iter(commands_queue.get, None):
print >>shell.stdin, shell_command # write command
shell.stdin.close()
if shell.wait() != 0:
raise RuntimeError(shell.returncode)
在您的特定情况下,您可以将修改后的环境直接传递给子流程:
import os
from subprocess import check_call
env = os.environ.copy()
env['NAME'] = 'XYZ'
check_call(["calabash-android", "run", "myApp.apk"], env=env)
答案 1 :(得分:0)
您可以一次性完成此操作: