$ python xxx.py args1 >> data/log.txt
第一条命令的含义是:将xxx.py这个python文件中print()原本输出到console的内容重定向到"data/log.txt"文件中。(“>>”是追加,“>”是直接写入,即会发生覆盖);
$ python xxx.py args1 | tee -a data/log.txt
第二条命令使用了tee命令,在保证xxx.py文件运行时将print内容输出到控制台的同时,还把这些内容保存在"data/log.txt"文件中。
1
2
3
4
问题
因为在python中,重定向和输出到控制台的内容会先被存在缓冲区中暂存,当它遇到换行符“\n”,或者缓存区的数据积累到一定的量的时候,就会将内容写到重定向的文件或者控制台中。
所以有的时候会发生比较蛋疼的情况,那就是可能要间隔很久,你才会看到你的"data/log.txt"中有内容;或者控制台才有内容显示。
解决
python的print()函数有个参数叫"flush",将它设为True,程序运行到该条输出内容时就会将缓存区的内容写出一次。即
print("abcdefghijklmnopqrst", flush=True)
1
命令行运行py文件的时候,加上一个命令行参数"-u"。即
python -u xxx.py args1 | tee -a data/log.txt
————————————————
版权声明:本文为CSDN博主「orzchenyuming」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29936933/article/details/110949949