我正在尝试使用子进程模块和 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
关于Python Subprocess.Popen 从一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984941/