我想在一个线程内使用子进程模块和Popen启动'rsync'。在我调用rsync之后,我还需要读取输出。我正在使用通信方法来读取输出。当我不使用线程时,代码运行正常。看来,当我使用线程时,它挂在通信调用上。我注意到的另一件事是,当我设置shell = False时,在线程中运行时我从通信中得不到任何回报。Python Subprocess.Popen从线程
21
A
回答
33
您没有提供任何代码,我们来看看,但这里的,做类似的东西,以一个样品你的描述:
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
9
这里是不使用线程有很大的实现: constantly-print-subprocess-output-while-process-is-running
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'])
相关问题
- 1. subprocess.Popen在线程
- 2. subprocess.Popen不是线程安全的?
- 3. 更好的多线程使用Python subprocess.Popen&communications()?
- 4. python subprocess.Popen慢下uWSGI
- 5. Pycharm subprocess.Popen python under virtualenv
- 6. Fedora 16,python subprocess.Popen从IDE vs终端
- 7. subprocess.Popen不会运行我的Python程序
- 8. 防止子线程死亡时线程subprocess.popen终止我的主脚本?
- 9. 传递参数给从subprocess.Popen
- 10. 使用subprocess.Popen恢复进程?
- 11. 如何使用STDIN从subprocess.Popen
- 12. Python - subprocess.Popen不返回输出
- 13. python subprocess.Popen块在futex_状态
- 14. Python的subprocess.Popen()和源代码
- 15. Python Subprocess.Popen属性错误?
- 16. 拦截subprocess.Popen调用在Python
- 17. Python 2.5的subprocess.Popen问题
- 18. 的Python subprocess.Popen通过管道
- 19. 的Python:从多个线程
- 20. 使用外部工具,subprocess.Popen和线程的多端口扫描
- 21. subprocess.popen似乎从crontab中
- 22. 打印从subprocess.Popen输出
- 23. 连续拍摄从subprocess.Popen
- 24. subprocess.Popen和缓冲过程输出
- 25. Python线程/线程实现
- 26. Python线程不是线程
- 27. 后台进程subprocess.Popen与管道
- 28. 如何获得“实时”信息反馈从subprocess.Popen在Python(2.5)
- 29. Python - 如何在subprocess.Popen中从PIPE读取非阻塞?
- 30. Python subprocess.Popen使用登录脚本失败
是的,这正是我正在做的。我想要读取线程内的输出。我也应该注意到我正在使用Python 2.3。我已经从2.4获得了一个子进程的副本。 – noahd 2009-06-12 04:55:46
然后请将此标记为“已回答” – 2009-06-12 12:11:17