我正在尝试从程序X打开程序Y,并继续使用程序X,但是,似乎一旦使用命令行调用Y,它就会开始跳过代码中的下一个,但仍然回应按键。
所以问题是,如何允许X完成代码。
我用:
proc=subprocess.Popen([cmd], shell=True)
proc.communicate()
以及:
os.system([cmd])
其中cmd是带参数的终端的命令。
顺便说一下,我正在运行Linux。
答案 0 :(得分:0)
两种方式(Popen
+ communicate()
和os.system
)都是同步,因此父进程的执行会阻止子进程完成。
如果你想让两个进程同时运行,你必须采用不同的方式来收集孩子的输出。
一些想法:
将代码移到父进程的线程中(参见threading)
删除proc.communicate()
并以与stdout pipes不同的方式收集子输出。有关更多建议,请参阅multiprocessing模块。或者,如果你觉得自己很勇敢,请看看ZeroMQ(可能有点矫枉过正,请注意,我认为这是一个很棒的沟通库)。