我正在尝试使用子进程模块和线程内部的Popen启动“ rsync”。调用rsync之后,我还需要读取输出。我正在使用communication方法读取输出。当我不使用线程时,代码运行良好。看来,当我使用线程时,它挂在通信调用上。我注意到的另一件事是,当我将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