先說一下情況,一個python寫的采集程序,做成windows服務在windows上運行。
這個問題出現的挺奇特,本來一套采集程序,一個采集文件的時候沒問題,兩個采集文件的時候也沒問題,當三個采集文件的時候,就報錯了。
錯誤:IOError: (9, 'Bad file descriptor')
我還以為是代碼有問題了,最終調試了下,發現是print的問題,
把print去掉后,重新運行就沒問題了。那么問題來了,為啥加上print有問題了?
上面是查到的解釋,看stackoverflow上的解釋,當不作為控制台會話運行時,sys.stdout不可用,所以print不能用。
那么問題來了,sys.stdout和print啥關系了?
當我們在 Python 中打印對象調用 print obj 時候,事實上是調用了 sys.stdout.write(obj+'\n')
print 將你需要的內容打印到了控制台,然后追加了一個換行符
print 會調用 sys.stdout 的 write 方法
對於兩個時候可以,三個時候,第三個就報錯,最終我只能理解為緩沖池滿了吧,算了,死磕到此結束。
參考:https://stackoverflow.com/questions/4230855/why-am-i-getting-ioerror-9-bad-file-descriptor-error-while-making-print-st
python的print與sys.stdout
sys.stdout.flush() Python的作用