Grep python输出流(尝试打印和stdout)

时间:2019-02-06 13:20:05

标签: python grep stdout

此答案说起来很简单:

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"

3 个答案:

答案 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,那么这里不是这种情况,您仍然会在终端中看到它,因为管道|如果不另外指定,则仅重定向标准输出 其余的未过滤到终端