我目前正在用我以前用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/

10-11 23:14
查看更多