簡體   English   中英

如何在不干擾附加(>>)的情況下將狀態欄輸出到控制台?

[英]How can I output a status bar to the console without interfering with append (>>)?

我有一個腳本,該腳本僅將以json格式格式化的日志事件逐行輸出到屏幕。 一行等於一個json日志事件。 我通常將結果簡單地附加到文件中,以便在需要時保存它們(./script.py >> json.logs)。

該腳本可能需要一些時間,具體取決於輸入內容,我想在其工作時向控制台底部添加一個簡單的進度欄或數字。 但是,如果我像往常一樣追加並且不希望這樣做,我認為這也將寫入日志文件。

將某些內容打印到控制台而不附加到stdout或>>的正常方法是什么? 另外 ,如果我只是將結果打印到屏幕上而不是將結果記錄到文件中,則我需要狀態欄也不要在屏幕上弄亂(或者只顯示在屏幕底部)控制台屏幕)。

默認情況下,使用>>將僅將STDOUT管道傳輸到文件,因此,如果您打印到STDERR,它將不會進入日志。 例如:

import sys
print("something") # this will go to json.logs
print("something else", file=sys.stderr) # this won't go to json.logs unless you specifically tell it to

至於制作欄本身,或者看一下tqdm之類的東西,或者如果您特別希望欄出現在窗口的底部,則可能需要使用curses滾動自己的解決方案。 或者只是做一些簡單的事情,例如一次打印一個星號。

這個想法是使用stderr( import sys; sys.stderr.write('the bar') print ('barstuff', file=sys.stderr)如果您使用的是python3 print ('barstuff', file=sys.stderr)可以使用print ('barstuff', file=sys.stderr) )。 如果您希望在屏幕上顯示欄的同時將標准輸出保存到文件中,則此方法效果很好。 要使條形圖始終位於屏幕底部看起來很復雜:您應該知道屏幕的高度是多少,我認為,使用python這幾乎是不可能的。

也許有些魔術,您可以使用\\ r在舊字符串上重寫,從而在屏幕的開始處以及該行下方的給定行數上打印該條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM