簡體   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