【发布时间】:2021-05-14 22:08:51
【问题描述】:
我有一个程序,当它运行时,会输出数百行以“Info:”开头的行和几行有用的输出。为了让事情变得更简单,我创建了一个简单的 python 和 bash 组合脚本来模拟我遇到的问题:
wait_2sec.py:
import time
print("Hello!")
time.sleep(2)
print("Goodbye!")
我正在尝试通过运行来修剪我的输出:
python wait_2sec.py | sed '/Goodbye/d'
但是,sed 不输出 Hello!直到python脚本完成之后。我不知道管道是否等到程序完成后才开始运行 sed 命令,或者 sed 命令是否挂断。 如果 sed 不适用于此用例,我愿意使用另一个命令来修剪输出。
【问题讨论】:
-
为什么不简单地使用 bash?
(echo "Hello!"; sleep 2; echo "Goodbye!") | sed '/Goodbye/d'?或者您可以为echo和sleep使用大括号括起来的列表而不是子shell,但是您需要用空格分隔并以';'结尾,例如{ echo "Hello!"; sleep 2; echo "Goodbye!"; } | sed '/Goodbye/d' -
切线,听起来像是您的 Python 程序中的设计缺陷。使用
logging,您可以通过设置日志级别轻松关闭所有INFO:输出。这些消息应该打印在标准错误上,而不是标准输出上;logging也是开箱即用的。