如何判断我的脚本是从cronjob还是从命令行运行?

sco*_*ttm 3 python cron

我有一个脚本,它通过写入同一个控制台行显示show的上传进度.当脚本从一个cron作业运行,而不是写一行时,我会得到很多行:

***   E0710091001.DAT  ***   [0.67%]
***   E0710091001.DAT  ***   [1.33%]
***   E0710091001.DAT  ***   [2.00%]
***   E0710091001.DAT  ***   [2.66%]
***   E0710091001.DAT  ***   [3.33%]
***   E0710091001.DAT  ***   [3.99%]
***   E0710091001.DAT  ***   [4.66%]
***   E0710091001.DAT  ***   [5.32%]
***   E0710091001.DAT  ***   [5.99%]
***   E0710091001.DAT  ***   [6.65%]
***   E0710091001.DAT  ***   [7.32%]
***   E0710091001.DAT  ***   [7.98%]
***   E0710091001.DAT  ***   [8.65%]
***   E0710091001.DAT  ***   [9.32%]
***   E0710091001.DAT  ***   [9.98%]
***   E0710091001.DAT  ***   [10.65%]
***   E0710091001.DAT  ***   [11.31%]
***   E0710091001.DAT  ***   [11.98%]
***   E0710091001.DAT  ***   [12.64%]
***   E0710091001.DAT  ***   [13.31%]
***   E0710091001.DAT  ***   [13.97%]
***   E0710091001.DAT  ***   [14.64%]
***   E0710091001.DAT  ***   [15.30%]
***   E0710091001.DAT  ***   [15.97%]
***   E0710091001.DAT  ***   [16.63%]
***   E0710091001.DAT  ***   [17.30%]
***   E0710091001.DAT  ***   [17.97%]
***   E0710091001.DAT  ***   [18.63%]
Run Code Online (Sandbox Code Playgroud)

我只是想知道我是否可以从脚本内部判断它是否是从cron调用的,如果是,我将不会显示此输出.

Mat*_*nes 10

你可以创建一个标志.可能没有记录,您的cron作业将传递给实用程序以构造输出.


Ale*_*lli 9

我检查sys.stderr.isatty()- 这样你就可以避免无用的"装饰"输出到stderr,无论何时用户都无法立即察觉到.


Mar*_*ddy 8

见下面的代码.用我想要显示的内容替换我的打印语句.

import sys
if sys.stdout.isatty():
    print "Running from command line"
else:
    print "Running from cron"
Run Code Online (Sandbox Code Playgroud)


Mic*_*hue 6

你想检查一下你是否在终端上.看到这个堆栈溢出问题: 如何检测我的shell脚本是否通过管道运行?