繁体   English   中英

如何知道我的脚本是从cronjob还是从命令行运行?

[英]How can I tell if my script is being run from a cronjob or from the command line?

我有一个脚本,它通过写入同一控制台行来显示节目的上传进度。 当脚本是从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调用了它,如果可以,则不会显示此输出。

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

我将检查sys.stderr.isatty() -这样一来,无论何时用户无法立即感知到stderr,都可以避免无用的“装饰”输出。

请参见下面的代码。 用您要显示的内容替换我的打印报表。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM