我正在尝试操纵/剥离7zip命令的输出和亲密用户关于进程的进度。我试图使用的示例代码如下:
import subprocess
proc = subprocess.Popen(['7zip','arg', 'archive'],shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if line != '':
#Do some striping and update pyqt label
print "test:", line.rstrip()
sys.stdout.flush()
else:
break
然而,真正的问题是print
语句仅在完成该过程后打印stdout
。有没有办法逐行捕获stdout
然后再操作和打印?
更新
更新了脚本以包含sys.stdout.flush()
答案 0 :(得分:0)
是的,popen家族的电话。
您可以查看文档here
(child_stdin,
child_stdout,
child_stderr) = os.popen3("cmd", mode, bufsize)
==>
p = Popen("cmd", shell=True, bufsize=bufsize,
stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
(child_stdin,
child_stdout,
child_stderr) = (p.stdin, p.stdout, p.stderr)
他们为您提供了文件描述符,您可以使用它们来读取被调用程序的输出。