subprocess.popen()的实时输出而不是逐行输出

Bas*_*sil 5 python subprocess popen

我目前正在用C++编写的python中重写一个小包装器程序.它从文件中提取文件并以另一种格式将其打包.

在C++中,我需要运行的系统命令的输出是"实时",即状态栏和实时显示的某些命令的百分比指示器.使用python,我将每个'百分比'单独地放在屏幕上(因为我逐行读取).这是一个例子:这是一个状态栏在python版本中的样子(这一直持续到100).在C++中,它确实会更新自己.

| (02/100)\rImporting AVC-H264: |                    | (03/100)\rImporting AVC-H264: |                       | (04/100)\rImporting AVC-H264: |=
Run Code Online (Sandbox Code Playgroud)

那是相应的python代码:

p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in iter(p.stdout.readline, ""):
   print line,
Run Code Online (Sandbox Code Playgroud)

关于如何使它看起来像在C++中的任何想法?

mil*_*man 7

可能是两件事......

readline可能正在改变程序输出中的一些内容.我相信\r是回车,并告诉终端返回行的开头,然后该程序可以凌驾文本输出,它只是输出.Readline最有可能删除它.

首先要尝试,

p = subprocess.Popen(args, stdout=subprocess.PIPE, \
                     stderr=subprocess.PIPE, \
                     universal_newlines=True)
for line in iter(p.stdout.readline, ""):
    sys.stdout.write('\r'+line[:-1])
    sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

必须进行刷新,因为stdout缓冲直到它得到一个\n,当然你不是写一个.