【发布时间】:2019-10-16 00:07:26
【问题描述】:
我正在调用一个非常嘈杂的 CLI 命令并想要过滤输出,大概是 stderr。 CLI 二进制文件的输出类似于 python 日志记录、INFO:… 或 WARNING:…。在 shell 中运行时,CLI 命令首先有一些“设置”日志,几秒钟后,每秒几十个的实际日志开始。
我尝试通过管道传输标准错误,并确保标准输出,如下所示:
process = subprocess.Popen(cmd,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
while process.stderr:
line = process.stderr.readline()
print("STDERR", line)
while process.stdout:
line = process.stdout.readline()
print("STDOUT", line)
这有效,并且 STDERR 打印出现在 CLI 命令执行的第一位。但是,当我在几秒钟后到达该部件时,我的 STDERR 打印输出仅为b'' — 可能与正常 shell 调用输出额外日志的频率相同。我也试过 read() 而不是 readline() 但无济于事。 (“STDOUT”永远不会被调用,顺便说一句)
以某种方式,在常规 shell 调用中记录的输出不同或过于频繁(?)或不完整(?) PIPE 无法发送它并正确读取和打印它。
我可以做些什么来进一步调试?
【问题讨论】:
标签: python logging subprocess pipe command-line-interface