0
有一個名爲redirect的函數,它將文件source
上的操作臨時重定向到文件target
。sys .__ stdout__正常工作,但sys.stdout不正確
def redirect(source, target):
source.flush()
fd = source.fileno()
with os.fdopen(os.dup(fd), source.mode) as source2:
os.dup2(target.fileno(), fd)
try:
yield
finally:
source.flush()
os.dup2(source2.fileno(), fd)
它正在從相同的模塊稱爲
with tempfile.TemporaryFile() as tmp:
with redirect(sys.stdout, tmp), nogil:
在編譯時,它用來產生一個AttributeError
AttributeError: StringIO instance has no attribute 'fileno'
在線路fd = source.fileno()
。
但是當我將sys.stdout
替換爲sys.__stdout__
時,沒有這樣的錯誤,測試成功通過。
現在我真的很困惑,爲什麼__stdout__
工作,但不是stdout
。
您是從IDLE環境還是從其他IDE運行程序?我想如果你從系統命令行運行你的程序,你會得到一個真實的'sys.stdout'文件。 –
我從終端運行nosetests –
啊,是的,鼻子測試的實現可能用'StringIO'對象替換'sys.stdout',以便它可以輕鬆捕獲輸出。這聽起來像鼻子測試不符合你試圖在它下面運行的功能。 –