一尘不染

线程中的Python Subprocess.Popen

python

我正在尝试使用子进程模块和线程内部的Popen启动“
rsync”。调用rsync之后,我还需要读取输出。我正在使用communication方法读取输出。当我不使用线程时,代码运行良好。看来,当我使用线程时,它挂在通信调用上。我注意到的另一件事是,当我将shell设置为False时,在线程中运行时无法从通信中得到任何回报。


阅读 163

收藏
2020-12-20

共1个答案

一尘不染

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

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
2020-12-20