簡體   English   中英

為什么我在制作print語句時會出現IOError:(9,'Bad file descriptor')錯誤?

[英]why am I getting IOError: (9, 'Bad file descriptor') error while making print statements?

我在Windows 2003服務器上運行python2.5腳本作為服務。 我收到此錯誤的簡單打印聲明:

IOError: (9, 'Bad file descriptor')

我刪除了所有的print語句,因為它們僅用於開發目的,但我不確定為什么print語句會給我帶來任何greif。 我運行相同的腳本而不是服務而沒有任何重大問題。 只是想知道其他人是否有任何見解?

您無法打印,因為sys.stdout在未作為控制台會話運行時不可用。

您可以考慮使用logging模塊,而不是使用print語句,以便設置logging級別並將所有關鍵事項寫入系統事件日志。


應該注意的是,您仍然可以通過執行以下操作來使其工作(或者默默地忽略該問題):

要為每個輸出流寫入文件:

import sys
sys.stdout = open('stdout.txt', 'w')
sys.stderr = open('stderr.txt', 'w')

要寫入單個文件:

import sys
sys.stdout = sys.stderr = open('output.txt', 'w')

或者默默地忽略所有打印語句:

import sys
class NullWriter(object):
    def write(self, value): pass

sys.stdout = sys.stderr = NullWriter()

在Python 2.x中,這是預期的行為。 這個錯誤報告中 ,Christian Heimes解釋說這是一個設計決定:

我建議不要在Python 2.7發布周期中這么晚更改代碼。 行為的改變太令人困惑了。 它也不是一個錯誤,而是一個設計決定。 五年多以前,我實現了與Python 3.0操作系統的部分IO交互。 我特意沒有將修改移植到2.6。

他還建議在Python 2.7中獲取Python 3.x樣式的print()行為的解決方法:

from __future__ import print_function
import sys
if sys.executable.endswith("pythonw.exe"):
    sys.stdout = sys.stdout = None

print("can handle sys.stdout = None just fine.")

暫無
暫無

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

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