同时调用2个外部应用程序

时间:2017-05-10 00:38:21

标签: python subprocess

我有一个python脚本,我试图在同一时间调用它们。 我把它写成:

os.system('externalize {0}'.format(result))
os.system('viewer {0} -b {1}'.format(img_list[0], img_list[1]))

然而,通过这样做,第二个应用程序将只会打开/显示,除非我退出/退出第一个应用程序。

我尝试使用subprocess,如下所示:

subprocess.call('externalize {0}'.format(result), shell=True)
subprocess.call('viewer {0} -b {1}'.format(img_list[0], img_list[1]))

但我没有取得多大成功。我在某处做错了吗?

2 个答案:

答案 0 :(得分:1)

subprocess等几个call函数只是Popen对象的便捷包装器,它以异步方式执行程序。你可以改用

将subprocess导入为subp

result =' foo' img_list = [' bar',' baz']

proc1 = subp.Popen('externalize {0}'.format(result), shell=True)
proc2 = subp.Popen('viewer {0} -b {1}'.format(img_list[0], img_list[1]), shell=True)
proc1.wait()
proc2.wait()

答案 1 :(得分:1)

Run them as subprocesses without waiting for finish

p1=subprocess.Popen(<args1>)
p2=subprocess.Popen(<args2>)

如果/当您需要等待完成和/或检查退出代码时,请在这些对象上致电wait()(或whatever else applicable)。

(一般情况下,you should never ignore the object that Popen() returns and its exit code if you need to do something as a result of the subprocess' work(例如,如果它们是临时的,请清理您提供的文件)。)