popen发送命令

时间:2012-08-22 04:04:36

标签: python linux operating-system popen

我正在尝试从程序X打开程序Y,并继续使用程序X,但是,似乎一旦使用命令行调用Y,它就会开始跳过代码中的下一个,但仍然回应按键。

所以问题是,如何允许X完成代码。

我用:

 proc=subprocess.Popen([cmd], shell=True)
 proc.communicate()

以及:

 os.system([cmd])

其中cmd是带参数的终端的命令。

顺便说一下,我正在运行Linux。

1 个答案:

答案 0 :(得分:0)

两种方式(Popen + communicate()os.system)都是同步,因此父进程的执行会阻止子进程完成。

如果你想让两个进程同时运行,你必须采用不同的方式来收集孩子的输出。

一些想法:

  1. 将代码移到父进程的线程中(参见threading

  2. 删除proc.communicate()并以与stdout pipes不同的方式收集子输出。有关更多建议,请参阅multiprocessing模块。或者,如果你觉得自己很勇敢,请看看ZeroMQ(可能有点矫枉过正,请注意,我认为这是一个很棒的沟通库)。