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. 使用函數:print vs return
- 3. Javascript print print by chrome
- 4. python和unicode stderr
- 5. CrystalReportViewer print
- 6. 從Awk中讀取stderr
- 7. Exec後PHP StdErr()
- 8. 閱讀php:// stderr
- 9. print語句
- 10. Perl array hash print
- 11. Brainfuck cell print loop
- 12. Print duplex Excel
- 13. python-Weird Print ... HW
- 14. 後續`print`
- 15. print arraylist元素?
- 16. fancybox IFrame print
- 17. print Mat float
- 18. CUPS-cloud-print CentOS
- 19. php:echo「」,print(),printf()
- 20. java pdf print NetBeans
- 21. Emacs print margin列
- 22. Dymo web print java.html
- 23. ReactJS print HTML comment
- 24. 爲什麼要在R print「no。」中聲明ifelse(i == 1,print(「yes!」),print(「no。」))兩次?
- 25. 爲什麼print(print())在Lua中不能像print(type(2))那樣工作?
- 26. Ruby的awesome_print到STDERR
- 27. Scons日誌stdout/stderr
- 28. 碼頭日誌,stderr
- 29. Nginx登錄到stderr
- 30. stderr和stdout的ssh?
還要注意的是標準錯誤是無緩衝,它可以是有用的。 – JimB 2009-06-02 16:08:49
我會調整你的答案的措辭,用「非文本或非狀態程序輸出」替換「程序輸出」。在所有情況下,stderr也不應該保留爲錯誤消息 - 例如,下載到標準輸出的程序,該標準輸出到另一個程序,但將下載進度輸出到標準錯誤處理器(可以「斷開」管道)。 – 2010-08-09 04:03:19
@JimB在什麼意義上? – JinSnow 2017-03-26 12:06:36