使用子进程操作python stdout/stderr

2024-05-04 11:05:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图操纵/剥离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()


Tags: 代码用户import命令true示例进程stdout
1条回答
网友
1楼 · 发布于 2024-05-04 11:05:11

是的,波本的家人。在

您可以查看文档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)

它们给你流的文件描述符,你可以用它们来读取被调用程序的输出。在

相关问题 更多 >