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

Python 如何判断脚本是从cronjob运行还是从命令行运行?,python,cron,Python,Cron,我有一个脚本,它通过写入同一控制台行来显示show的上传进度。当脚本从cron作业运行时,我得到了许多行,而不是写入一行: *** E0710091001.DAT *** [0.67%] *** E0710091001.DAT *** [1.33%] *** E0710091001.DAT *** [2.00%] *** E0710091001.DAT *** [2.66%] *** E0710091001.DAT *** [3.33%] ***

我有一个脚本,它通过写入同一控制台行来显示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调用的,如果是,我将不显示此输出

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

您想检查是否在终端上。请参阅此堆栈溢出问题:

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

我会检查
sys.stderr.isatty()
——这样可以避免无用的“修饰”只要用户不能立即察觉到,就输出到stderr。

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

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

不用担心,我们都会遇到这种情况。很高兴我能帮上忙。这个解决方案是权宜之计,但正确的解决方案是检查tty/TERMINAL。我不希望有争论,所以我接受了另一个答案。不过,谢谢!记录国旗。如果将来您希望此功能适用于正在调用的脚本的另一种方法,该怎么办?一个人可以很容易地看到“-iscron在被cron调用时为日志安全地格式化输出”,然后继续。这会使cron以外的应用程序运行的进程与cron作业混淆吗?从技术上讲,这实际上是检查stdout是否连接到终端。例如,重定向到一个文件,这就是cron将要做的。鉴于OP的问题是关于确定打印什么,我猜想这是一个安全的假设,即重定向到文件时的打印行为是相同的,而不管它是否由cron启动。