[python技巧]Linux终端下使用Python和tee命令

问题背景:

        在跑深度学习的情况下,需要在Linux终端下直接使用python命令来执行程序,但是我不仅想显示在屏幕上,还想把log文件保存到本地,来分析结果。这时候就需要用到Linux的管道命令和重定向命令tee来实现。

解决方案:

        关于tee命令可以参考[1] [4],Python在终端的使用可以参考[2]。

 python -u stout.py | tee -a logfile2

       这行命令的意思是说Python执行标准输出流不仅输出到屏幕还经过重定向输入到logfile2这个文件中去。 一定要加上-u这个参数,在[2]文档有提到:


-u

    Force the stdout and stderr streams to be unbuffered. This option has no effect on the stdin stream.

    See also PYTHONUNBUFFERED.

    Changed in version 3.7: The text layer of the stdout and stderr streams now is unbuffered.

附加技巧:

如果你不想在终端上输出,想让程序在后台执行,以防手残关掉终端(深度学习训练时千万别犯这种低级错误),可以使用:

nohup python -u train_all.py > train_all.log 2>&1 &

    这行命令详解:

    nohup   放在命令的开头,表示不挂起(no hang up),也即,关闭终端或者退出某个账号,进程也继续保持运行状态,一般配合&符号一起使用。如nohup command &

   python -u train_all.py     表示Python执行时,加上-u(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕[2]

   > train_all.log      表示将标准输出输出到train_all.log这个log文件中去

   2>&1   也就表示将错误重定向到标准输出上

   &   放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务。

 

reference:

[1]https://linux.cn/article-9435-1.html

[2]https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED

[3]https://stackoverflow.com/questions/21662783/linux-tee-is-not-working-with-python

[4]http://man.linuxde.net/tee

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值