ubuntu下python跑任务输出到文件中遇到的一些问题(输出重定向)
之前主要是参考https://www.cnblogs.com/chason95/articles/9760291.html 一般使用
python test.py > ./log.txt
或
python test.py | tee ./log.txt
然后就会缓存很多输出后才能在屏幕或log中查到,就很难受。
后来领导给我了一条命令
srun --partition=GTX1080 --mpi=pmi2 --gres=gpu:1 -n1 --ntasks-per-node=1 --job-name=TEST --kill-on-bad-exit=1 python -u test.py > log.txt 2>&1 &
去掉srun部分,大概是
python -u test.py > log.txt 2>&1 &
这是啥玩意儿?(ubuntu都是用到了才学的,所以猛地一看有点懵逼)
但是这样就可以在log中实时看到输出信息了(tail -f log.txt)
那么这些乱七八糟的参数是啥意思呢?
首先,python -u
-u : force the binary I/O layers of stdout and stderr to be unbuffered;
stdin is always buffered; text I/O layer will be line-buffered;
also PYTHONUNBUFFERED=x
原来如此!卡我的设置是这个!
然后>,就是简单的重定向。
2>&1,这个又是啥呢?
There are two forms of redirection the standard output and standard error into standard output.
2>&1就是其中一个,另一个是&>,那他们有什么区别呢?
Only >& works in csh or tcsh
In ksh only 2>&1 works.
dash use >file 2>&1 redirection only
csh,tcsh,ksh,dash是啥参考https://blog.csdn.net/LEON1741/article/details/77931460
最后的&: the ampersand &
at the end makes a command run in the background。这样这条命令就可以在后台跑不用占这一个shell了。(用screen可以达到同样的效果,不过没这个方便。)
做个小笔记,就酱。
参考资料:
http://www.eetop.cn/blog/html/03/6503-25123.html
https://blog.csdn.net/LEON1741/article/details/77931460
https://askubuntu.com/questions/635065/what-is-the-differences-between-and-21
https://askubuntu.com/questions/833833/what-does-command-do/833848