在我的Python腳本的開頭我做的:的Python os.dup和副作用
if '-' in args:
fd = os.fdopen(os.dup(0))
sys.stderr.write(fd.read())
fd.close()
我認爲這不會影響我的程序的其餘部分的行爲,但它似乎,即如果我將這4行註釋掉,我的代碼就可以工作,但是如果它們被執行了,那麼我的程序就會出現意想不到的結果
我是否正確使用os.dup?
謝謝。
在我的Python腳本的開頭我做的:的Python os.dup和副作用
if '-' in args:
fd = os.fdopen(os.dup(0))
sys.stderr.write(fd.read())
fd.close()
我認爲這不會影響我的程序的其餘部分的行爲,但它似乎,即如果我將這4行註釋掉,我的代碼就可以工作,但是如果它們被執行了,那麼我的程序就會出現意想不到的結果
我是否正確使用os.dup?
謝謝。
我也是不知道的os.dup()
正確使用,但是對於你的榜樣,你可以做
if '-' in args:
sys.stderr.write(sys.stdin.read())
甚至
print(input()) # for python 2.x it would be print raw_input()
你是不是,唉,使用os.dup()
正確。很顯然,您希望在標準輸入流中「向前看」,看看會出現什麼,然後將其打印出來,然後讓程序的其餘部分啓動並看到仍在此處等待標準輸入的相同輸入。 (是我的猜想正確的,你是爲調試目的這樣做呢?)
與方法的問題是,運行os.dup()
簡單地創建了第二個文件描述,沒有第二個文件 - 換句話說,它創建另一個整數,您可以參考輸入數據的來源,但dup()
不會創建第二個實際的數據源。因此,無論您是第一個文件描述符還是第二個文件描述符,您都仍然「用完」輸入流中的所有數據。
您的問題不完整,沒有描述您在排除故障時遇到的「意外結果」。 –
我以前見過這種模式!他試圖在他的輸入是什麼,但沒有「使用它」,然後在其餘的程序可以讀取它的情況下偷偷看看。我承認,在我自己的Unix青年中,我自己試過一次,然後才意識到文件描述符*和*實際文件*是兩個完全不同的東西? :) –