print
或stderr
有任何特定的優缺點嗎?print vs stderr
回答
它們只是兩個不同的東西。 print
一般去sys.stdout
。值得了解stdin
, stdout
, and stderr
之間的區別 - 它們都有其用途。
特別是,stdout
應該用於正常的程序輸出,而stderr
應該只保留用於錯誤消息(異常程序執行)。有用於拆分這些流的實用程序,它允許您的代碼的用戶區分正常輸出和錯誤。
print
可以打印在任何類似文件的對象上,包括sys.stderr
。
print >> sys.stderr, 'Text'
使用sys.stderr
的錯誤,而不是sys.stdout
的優點是:
- 如果stdout重定向到一個文件的用戶,她仍然在屏幕上看到的錯誤。
- 它沒有被緩衝,所以如果
sys.stderr
被重定向到一個日誌文件,那麼在錯誤被記錄之前程序崩潰的可能性就會降低。
這個答案一點與Python 2編寫的。 對於Python 3,請改爲使用print('Text', file=sys.stderr)
。
+1。大!我不知道'print'的這個屬性 – db42 2011-05-21 19:54:05
請注意:這裏有一些微妙之處,包括流是否要交互設備。最大的驚喜是,在Python 3中,stderr是行緩存的(至少在Unix中)。例如,在一個終端窗口,以下打印數在Python 2每兩秒:
for n in range(5):
print >> sys.stderr, n, # final comma to squelch newline character
time.sleep(2)
而在Python 3中,當滿足下列打印的數字一起循環結束:
for n in range(5):
print(n, file=sys.stderr, end='') # print n to sys.stderr with no newline char
time.sleep(2)
將腳本重定向到不同的文件時,將stderr和stdout分開很有用。我通常使用stderr來記錄日誌消息,並跟蹤程序的流程,但是使用stdout來獲取更多有用的消息,我將在稍後使用它們。
一個另一種方式編寫到stderr是如下面的例子:
import sys
sys.stderr.write("Error has occurred opening a file!")
- 1. javax print vs java awt print api
- 2. python IDLE vs Mac Terminal print statement
- 3. print()vs sys.stdout.write():which和why?
- 4. 使用函數:print vs return
- 5. python print「hello world」vs「hello world」
- 6. Clojure打印功能:pr vs print
- 7. Javascript print print by chrome
- 8. python和unicode stderr
- 9. CrystalReportViewer print
- 10. Bootstrap print
- 11. 爲什麼「echo'2'。print(2)+ 3」print 521?
- 12. 讀取子進程的STDERR
- 13. 從Awk中讀取stderr
- 14. Tk :: Stderr空文本subwidget
- 15. Haskell print對
- 16. php:echo「」,print(),printf()
- 17. python - print output
- 18. print arraylist元素?
- 19. java pdf print NetBeans
- 20. Xcode Air print
- 21. Emacs print margin列
- 22. knitr:not print leading zeros
- 23. Jekyll print {{在markdown
- 24. Dymo web print java.html
- 25. print語句
- 26. php webservice print value
- 27. dust.js object print
- 28. print Mat float
- 29. python-Weird Print ... HW
- 30. Print duplex Excel
還要注意的是標準錯誤是無緩衝,它可以是有用的。 – JimB 2009-06-02 16:08:49
我會調整你的答案的措辭,用「非文本或非狀態程序輸出」替換「程序輸出」。在所有情況下,stderr也不應該保留爲錯誤消息 - 例如,下載到標準輸出的程序,該標準輸出到另一個程序,但將下載進度輸出到標準錯誤處理器(可以「斷開」管道)。 – 2010-08-09 04:03:19
@JimB在什麼意義上? – JinSnow 2017-03-26 12:06:36