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

时间:2009-07-10 15:22:22

标签: 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%]

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

5 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:9)

我会检查sys.stderr.isatty() - 这样一来,无论如何,当用户无法立即察觉到时,你会避免无用的“装饰”输出到stderr。

答案 2 :(得分:8)

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

import sys
if sys.stdout.isatty():
    print "Running from command line"
else:
    print "Running from cron"

答案 3 :(得分:6)

您想检查您是否在终端上。看到这个堆栈溢出问题: How to detect if my shell script is running through a pipe?

答案 4 :(得分:2)

一种简单的方法是让脚本采用一个参数来抑制该输出,并在从cron调用它时提供该参数。