【发布时间】:2010-12-09 01:44:22
【问题描述】:
我想在 Windows 中 subprocess.Popen()rsync.exe,并在 Python 中打印标准输出。
我的代码可以工作,但在文件传输完成之前它无法捕捉进度!我想实时打印每个文件的进度。
现在使用 Python 3.1,因为我听说它应该更好地处理 IO。
import subprocess, time, os, sys
cmd = "rsync.exe -vaz -P source/ dest/"
p, line = True, 'start'
p = subprocess.Popen(cmd,
shell=True,
bufsize=64,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
for line in p.stdout:
print(">>> " + str(line.rstrip()))
p.stdout.flush()
【问题讨论】:
-
(来自 google?)当 PIPE 的缓冲区之一被填满且未被读取时,所有 PIPE 都会死锁。例如填充 stderr 时出现 stdout 死锁。切勿通过您不打算阅读的 PIPE。
-
有人能解释一下为什么不能只将 stdout 设置为 sys.stdout 而不是 subprocess.PIPE 吗?
标签: python subprocess stdout