Python 3标准输出处理

2024-10-04 03:24:40 发布

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

我是Python的新手,我到处寻找如何处理子进程的STDOUT的例子,但运气不好。你知道吗

我有一个测试命令行可执行文件,它不断地产生输出,并试图实时读取标准输出并将其打印到屏幕上。最终它会在本地处理数据,然后将摘要发送到另一台机器上,但我已经简化了这个问题。你知道吗

我已经尝试使用Python来实现这一点,如下代码所示:

import subprocess, time, os, sys
cmd = [sys.executable, 'TestStdOut.exe']

p = subprocess.Popen(cmd,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)

for line in iter(p.stdout.readline, b''):
    print(">>> " + line)

我使用的测试可执行文件目前只输出dateTime,stdout如下所示:

....
16/11/2015 10:52:44
16/11/2015 10:52:44
16/11/2015 10:52:44
16/11/2015 10:52:44
16/11/2015 10:52:44
16/11/2015 10:52:45
....

但我得到了这个错误,我无法找出原因:

Traceback (most recent call last):
  File "test_stdout.py", line 9, in <module>
    print(">>> " + line)
TypeError: Can't convert 'bytes' object to str implicitly

我希望Python只显示相同的行,就像我从命令行运行可执行文件一样。我在谷歌上搜索了这个错误,但似乎找不到答案。你知道吗

我错过了什么?你知道吗

非常感谢

皮特

更新:感谢2RING,我回去查看了我的笔记,这段代码现在可以工作了:

import subprocess, time, os, sys
cmd = ['TestStdOut.exe']

p = subprocess.Popen(cmd,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)


while True:
  line = p.stdout.readline()
  if line != '':
    print(line.rstrip().decode('utf-8'))
  else:
    break

Tags: 代码命令行importcmd可执行文件timeosstdout