2017-04-15 118 views
3

我的Python代碼中出現了一個奇怪的行爲。它運行在我的Windows控制檯在SSH控制檯中輸入()print()後發生EOF錯誤

例如罰款,

@ CMD.EXE:蟒蛇我file.py文件

print("-------------------------- RANDOM STRING HERE! --------------------------------") 
email = input() 
print("-------------------------- RANDOM STRING HERE! --------------------------------") 
name = input() 
print("-------------------------- RANDOM STRING HERE! --------------------------------") 
address = input() 
print("-------------------------- RANDOM STRING HERE! --------------------------------") 
print(email+name+address) 

這的file.py

內容當我這樣做時,相同的代碼不起作用:

curl ://filepath/file.py | sudo python3 

在SSH下的控制檯中。我已經試過PuTTY和Git Bash,但是我仍然遇到同樣的錯誤。

的EOFError在SSH控制檯:

EOFError in SSH Console

我已經嘗試過使用sys.stdin,但預期它不工作。

+0

您正在加載標準輸入腳本。 Python已經閱讀了所有內容,沒有更多可用的內容。 – ephemient

+0

@ephemient在某種程度上搜索和理解stdin是如何工作的......我仍然無法獲得用戶在這些控制檯下的輸入..試過sys.stdin.read()=> nope和sys.stdin.buffer.raw.read(100 ),在cmd中工作,但通過SSH沒有通過..(無限字段,並按下輸入時不提交)..有沒有什麼辦法可以工作? – Yidir

回答

2

不,真的,你不能這樣做。運行

... | sudo python3 

把劇本給stdin所以你不能從腳本中的任何更多的使用stdin

但是你可以使用一個臨時文件做它的其他方式輪無管:

curl ://filepath/file.py -o /tmp/script 
sudo python3 /tmp/script 

或者用進程替換(Bash中):

python3 <(curl ://filepath/file.py) 
+1

有道理!部分使用進程替代(不適用於sudo)由於某種原因返回:** python3:無法打開文件'/ dev/fd/63':[Errno 2]沒有這樣的文件或目錄**和** (23)寫入主體**失敗,臨時文件不起作用,導致**捲曲:(6)無法解析主機:sudo curl:(6)無法解析主機:python3 curl:(3)畸形** - 語法錯誤? Upvoted,我缺乏一些聲譽,謝謝@Jakuje! – Yidir

+1

是的。顯然,'sudo'關閉了所有附加的文件描述符(這是一個很好的安全措施,但打破了這個用例)。沒有sudo它可以工作。 – Jakuje

相關問題