nohup命令

    常常会运行相似这样的命令nohup python main-script.py arg1 arg2 > log2.txt 2>&1 &python

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略全部挂断(SIGHUP)信号。spa

也就是说当你按下Ctrl+D从Linux注销用户之后,你的程序仍是能够运行而不是随着你的离开而结束。命令行

若是不指定输出文件的位置,相似这样:nohup python main-script.py arg1 arg2 & 那么会在当前code

目录下有一个nohup.out文件记录log, 那么> log2.txt 2>&1 & 是什么意思呢。 > log2.txt是将输出重定向到 log2.txt文件blog

2>&1 则是将标准错误(2)也定向到标准输入(1)[标准输入(0)就是从命令行输入了]。ip

  不过常常会看到,一个程序运行了好久,却没有多少log出来,而是等到必定数量的内容生产后,log文件中才有内容。这是由于it

I/O缓冲区的问题。若是程序重定向到文件会在缓冲区满了之后才写入磁盘文件,好比如下的代码not_flush.py:class

from time import sleep
# import sys
for i in range(100000):
  print i
  # sys.stdout.flush()
  sleep(1)

使用命令 python not_flush.py > log & 好久log里也没有内容,可是加上注释之后 每一次循环都会写入文件.import

另外,对于Python2.X的print 和sys.stdout.write()好像还不同,若是但愿尽快看到log,仍是使用sys.stdout.write()+sys.stdout.flush()比较好.变量

好比:

from time import sleep
import sys
for i in range(100000):
  sys.stdout.write(str(i) + "\n")
  sys.stdout.flush()
  sleep(2)

这样每次循环log就有内容了,不用担忧程序出错之后 继续运行了好久才会发现了,由于Python这种动态语言一个变量名字写错了,到最后一个步骤你的程序仍是挂了。

相关文章
相关标签/搜索