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

3 投票
5 回答
1564 浏览
提问于 2025-04-15 12:49

我有一个脚本,它通过在同一行上写入内容来显示上传进度。当我从定时任务(cron job)运行这个脚本时,它不是在一行上写,而是出现了很多行:

***   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%]

我只是想知道,能不能在脚本内部判断它是不是从定时任务调用的,如果是的话,我就不显示这个输出。

5 个回答

10

我建议你检查一下 sys.stderr.isatty() 这个东西。这样做可以避免在一些情况下向错误输出(stderr)发送不必要的“装饰”信息,因为这些信息用户根本看不见。

10

你可以创建一个标志。这个标志可能没有详细说明,你的定时任务(cron job)可以把它传递给工具,以便整理输出结果。

9

请看下面的代码。把我这里的打印语句换成你想要显示的内容。

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

撰写回答