为什么 grep 忽略“python3 -m http.server”输出的第一行?

问题描述 投票:0回答:1

由于某种原因 grep 不会打印命令输出的第一行:

python3 -m http.server

python3 -m http.server
# prints: Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...


python3 -m http.server | grep -E .
# nothing is printed


python3 -m http.server 2>&1 | grep -E .
# nothing is printed

但是,如果我执行请求,我可以看到其余的日志(但看不到第一行):

127.0.0.1 - - [05/Oct/2023 11:07:28] "GET / HTTP/1.1" 200 -

为什么会发生这种情况?有没有办法用 grep 打印第一行? (注:管道到

tail
时也会出现同样的问题)

bash grep stdin io-redirection
1个回答
0
投票

看来 python stdout 和 stderr 默认是缓冲的,试试:

PYTHONUNBUFFERED=x python3 -m http.server 2>&1 | grep -E .

来源

© www.soinside.com 2019 - 2024. All rights reserved.