我有一个脚本,它通过写入同一控制台行显示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调用它,如果是,我将不会显示此输出。
答案 0 :(得分:10)
答案 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调用它时提供该参数。