Python Subprocess.Popen 从一个线程

标签 python multithreading subprocess rsync

我正在尝试使用子进程模块和 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/

相关文章:

python - 修改pygame的数组以进行blit

python - 我是否需要锁定来保护我的代码中的多线程竞争条件

c++ - 如何销毁由 std::thread 显式创建的线程?

python - 如何作为连续 session 与 python 的子进程交互

python - 您如何简单地更改 Python 脚本以捕获由其自身及其子进程写入 stdout 的所有内容?

python - 在 PyQt 中将 QstringList 转换为 Qstring

python - 使用 Fig.update_layout Plotly 更新 Traces 的可见性

python - 通过tornado.proces.Subprocess调用xtail

python - django.core.exceptions.ImproperlyConfigured : Error loading MySQLdb module: No module named MySQLdb

java - 方法局部内部类作用域