执行tail -f命令时,不能实时看到print命令的输出
下面的代码,保存到文件z.py里面。
import time
from tqdm import tqdm
for vin in tqdm(range(10)):
print(vin)
time.sleep(1)
后台执行:nohup python3 z.py > z.log 2>&1 &
,
执行tail -f z.log
,不能够实时看到print(vin)
的打印结果,而是程序结束后一次性输出,为什么?
当你使用 nohup
命令将 Python 脚本放入后台执行时,它将脱离终端并且不再将标准输出(stdout)和标准错误输出(stderr)直接连接到终端。这就是为什么你在执行 tail -f z.log
时不能实时看到 print(vin)
的输出。
为了实时查看输出,你可以在 Python 脚本中使用以下方法之一:
-
使用
sys.stdout.flush()
:在每次打印后手动刷新标准输出。这样可以强制将缓冲区的内容刷新到文件中,从而实时看到输出。你需要导入sys
模块来使用它。import time from tqdm import tqdm import sys for vin in tqdm(range(10)): print(vin) sys.stdout.flush() time.sleep(1)
-
使用
-u
选项:在命令行中使用python3 -u
来执行脚本。这个选项会禁用输出缓冲,从而实时查看输出。示例:nohup python3 -u z.py > z.log 2>&1 &
使用其中一种方法,你应该能够实时查看脚本的输出,而不是在程序结束后才看到。
作者:jsp
-------------------------------------------
个性签名:无论在哪里做什么,只要坚持服务、创新、创造价值,其它的东西自然都会来的。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!