Pythonsubprocess。从一个线程开启

我想在一个线程内使用subprocess模块和Popen启动一个'rsync'。 在我调用rsync之后,我还需要读取输出。 我正在使用沟通方法来读取输出。 代码运行良好,当我不使用线程。 看来,当我使用一个线程挂在通信电话。 另外我注意到的是,当我设置shell = False的时候,在线程中运行时,我从通信中得不到任何东西。

您没有提供任何代码供我们查看,但下面是一个与您描述的内容类似的示例:

import threading import subprocess class MyClass(threading.Thread): def __init__(self): self.stdout = None self.stderr = None threading.Thread.__init__(self) def run(self): p = subprocess.Popen('rsync -av /etc/passwd /tmp'.split(), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) self.stdout, self.stderr = p.communicate() myclass = MyClass() myclass.start() myclass.join() print myclass.stdout 

这是一个很好的实现,不使用线程: 不断打印subprocess输出,而进程正在运行

 import subprocess def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = '' # Poll process for new output until finished for line in iter(process.stdout.readline, ""): print line, output += line process.wait() exitCode = process.returncode if (exitCode == 0): return output else: raise Exception(command, exitCode, output) execute(['ping', 'localhost'])