nohup和python使用注意

1. 前言

同学们在使用nohup和python的过程中,应该都遇到过,无法将python脚本中print输出的内容输出到指定的位置。例如:

nohup python3 test.py > /tmp/test.log &

首先,对于nohup命令的使用时没问题,之所以会出现上边的问题,是因为python的输出有缓冲,导致在/tmp/test.log中可能很快看不到输出内容。为了避免python的缓冲,导致无法看到实时的输出,需要使用python的-u参数。

nohup python3 -u test.py > /tmp/test.log &

这样就能在文件/tmp/test.log中马上看到print的输出了。

2. nohup和&使用详解

2.1 nohup

nohup是不挂起( no hang up)。nohup命令可以在你退出帐户之后继续运行相应的进程。在使用nohup命令运行程序时,如果我们没有指定输出重定向到哪儿,默认则会输出重定向到nohup.out的文件中。

# nohup的使用格式
nohup command
# 例子
nohup python3 test.py

2.2 &

在终端运行某个作业,则该终端就被占据,无法在该终端运行其它作业了,因此需要在作业的命令后加上&,意思就是让这个作业在后台运行而不在前台运行了。例如:

# 格式
command &
# 例子
python3 test.py &

但是,这样做还是有问题,当我们关闭了这个终端界面(例如在xshell中一个shell界面),那么就算是用&后台运行的进程也会被kill掉。这时我们就需要同时使用nohup&了。

nohup python3 test.py &

这样就算我们关闭了终端界面,程序一样运行。但是又有一个问题了,我不知道程序运行的情况了啊,看不见输出内容,不知道这个程序现在啥情况啊,这可咋整。这时候就需要将程序的输出重定向到你所指定的文件中。

重定向输出通常使用>>>,分别表示覆盖和追加。

在linux的重定向中: 0/1/2代表着不同的涵义。

  • 0表示标准输入。
  • 1标准输出。
  • 2标准错误信息输出。
    通过指明0/1/2来指定需要重定向内容是标准输入/标准输出/标准错误信息输出。默认重定向的内容是1(标准输出)。

在上面命令中将python3 test.py的输出通过>命令重定向到了/tmp/test.log

2.2 标准输出重定向

# 格式
nohup command 1> my_print.log &
# 默认就是标准输出,因此可以省略这个1
nohup command 1> my_print.log &

# 例子,表示把标准输出写入test_error.log文件中
python3 test.py > test_error.log
nohup python3 test.py > test_error.log &

2.3 标准错误重定向

# 格式
nohup command 2> my_error.log &
# 例子,表示把错误输出写入test_error.log文件中
python3 test.py 2> test_error.log
nohup python3 test.py 2> test_error.log &

**其实可以同时重定向多种输出。**例如:

python3 test.py > test_error.log 2> my_error.log

某些情况下,可能需要将标准输出、标准错误等都重定向至同一个文件。这个时候就需要使用2>&1,意思时将标准错误重定向至标准输出。例如:

# 格式
nohup command > xx_file 2>&1 &

# 例子,这样就把标准输出和标准错误都重定向到test_error.log文件了。
python3 test.py > test_error.log 2>&1

# 结合nohup和&,后台运行程序
nohup python3 test.py > test_error.log 2>&1 & # 顺序不能变!!!

在这里的标准输出已经重定向到了test_error.log文件,而标准错误又重定向到了标准输出,所有都重定向到了test_error.log文件种。

2.4 忽略输出

需要忽略输出时只需要将输出重定向到/dev/null,这就相当于时linux中的回收站。例如:

python3 test.py > /dev/null

3. 参考文献

[1] 用nohup重定向python输出到文件不成功的解决办法
[2] linux重定向及nohup不输出的方法
[3] linux后台执行命令:&和nohup
[4] 用nohup执行python程序时,print无法输出
[5] Linux学习】nohup后台运行程序以及输出重定向

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值