我目前正在用我以前用C++编写的python重写一个小型包装程序。它从文件中提取文件,然后以另一种格式将它们装箱。
在C++中,我需要运行的系统命令的输出是“实时”的,即实时显示的状态栏和某些命令的百分比指示器。使用python,我可以将每个“百分比”分别转储到屏幕上(因为我逐行阅读)。这是一个示例:这就是状态栏在python版本中的外观(一直持续到100)。在C++中,它确实会更新。
| (02/100)\rImporting AVC-H264: | | (03/100)\rImporting AVC-H264: | | (04/100)\rImporting AVC-H264: |=
多数民众赞成在相应的Python代码:
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in iter(p.stdout.readline, ""):
print line,
关于如何使它看起来像C++的任何想法?
最佳答案
可能是两件事...
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()
您必须执行刷新操作,因为stdout会缓冲直到它得到
\n
和当然你不是写一个。
关于python - subprocess.popen()的实时输出,而不是逐行输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4620547/