2013-10-05 68 views
1

如何格式化控制檯腳本的輸出?我的意思是在應用程序運行期間產生輸出(日誌,標準輸出)。控制檯輸出風格,格式化最佳實踐

BG:我有一個Python腳本,它接收數據,處理數據,更新數據庫中的一些相關數據並輸出進度。我可以以各種方式輸出樣式:

************ Starting programm X ************ 
Fetching 450 lands... Done 
540 local lands found 
syncronizing [--------    ] 10% 
Done 

大寫輸出或全部字母小寫?應用於輸出的縮進?什麼視覺糖像破折號或哈希?進度條喜歡在wget中?

我明白這是一種設計,但在網絡中我們有一些基本的規則,我們有可用性,並且我們在控制檯輸出藝術中沒有規則。雅各布尼爾森對控制檯腳本的輸出說什麼?

+1

應用程序應該大聲地失敗,並悄悄地取得成功。最好的輸出是沒有輸出。 –

+0

@WilliamPursell令人敬畏的話!完全同意。 – aIKid

+0

進度條不錯,但其餘的可能在日誌中更好(具有冗長的可選)。計劃你的輸出是可解析和可移植的。 – kalhartt

回答

2

即使在控制檯腳本中,可用性也非常重要。尤其是對於任何長時間運行的過程,無論UI是圖形還是終端,都可以更好地展示任務進度。我會建議看看Nielsen's heuristics 許多原則直接適用於控制檯輸出。有三種啓發式特別談到控制檯輸出可能看有用:系統狀態

  1. 可見性:通過某種進度條在控制檯顯示進度顯示什麼是內事合理的時間。
  2. 一致性和標準:您在您的問題破折號或散列中提及此問題。
  3. 美學和極簡主義設計:嘗試並輸出最少量的相關和有用的信息。

對於標準和一致性,請使用現有常用命令的約定。兩個好的檢查是wgetpv。他們都有着非常相似的尋找progressbars:

wget的

44% [================>      ] 441,017,992 111MB/s eta 6s 

光伏

138MB 0:00:01 [ 107MB/s] [=========================================>] 100% 

他們都通常看起來是一樣的。他們還堅持最小的設計,因爲在一行中它們表示文本和條形式的完成百分比,速度,完成的字節數以及經過的eta或時間。

就合理時間更新而言。我傾向於每0.1秒更新控制檯中的狀態。爲了讓界面感覺到響應,你需要這個範圍內的東西。 wget似乎每0.2秒更新一次。但命令watch的默認值爲2秒,感覺過於緩慢。我通常會以watch -n 0.1 command的結果運行該命令,使其更新間隔爲0.1秒。

其中一條評論指出,你的輸出應該是可解析和可移植的。如果可能的話,這是一件非常好的事情。我特別喜歡wget處理這個問題的方式。如果您在終端中運行wget,它會使用條形進度指示器,但是如果您將其傳送到文件或其他程序,則會使用點進度指示器。它會檢測您是否有tty或自動管道命令並選擇最合適的格式。您可以在--progress參數文檔下的手冊頁上閱讀它。本質上它有一個更容易讀取的輸出,另一個更容易讀取機器和記錄。

一些相關的/有用的鏈接: