此答案说起来很简单:
pipe python logging stdout stream output to grep
python main.py 2>&1 | grep INFO
我有以下文件,我已经尝试过使用print()
和sys.stdout.write()
。
import sys
from time import sleep
while True:
sleep(1)
sys.stdout.write("this is a thing")
# Also tried print()
我正尝试通过以下方式收集"thing"
:
python output.py 2>&1 | grep "thing"
答案 0 :(得分:2)
您需要使用newline
,最好使用flush
stdout
。
import sys
from time import sleep
while True:
sys.stdout.write("this is a thing\n")
sys.stdout.flush()
sleep(1)
答案 1 :(得分:1)
while True:
sleep(1)
print("this is a thing", flush=True)
也将正常工作,无需直接忙于stdout。
默认情况下,print
使用缓冲区进行输出,只需将每个调用都刷新为半实时流即可。
答案 2 :(得分:0)
作为补充:如果输出将发送到stderr,那么这里不是这种情况,您仍然会在终端中看到它,因为管道|如果不另外指定,则仅重定向标准输出 其余的未过滤到终端