Python 如何判断脚本是从cronjob运行还是从命令行运行?
我有一个脚本,它通过写入同一控制台行来显示show的上传进度。当脚本从cron作业运行时,我得到了许多行,而不是写入一行: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%] ***
*** 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启动。