我想編譯一個使用Python的C程序,並且想要使用「<」運算符給出輸入,但它不能按預期工作。 如果我編譯C程序並通過給它輸入一個文件來運行它,例如使用Python子進程調用C編譯器命令
./a.out <inp.txt works
但同樣,如果我嘗試使用Python腳本來做到這一點,它沒有像預期的那樣工作。 例如:
import subprocess
subprocess.call(["gcc","a.c","-o","x"])
subprocess.call(["./x"])
和
import subprocess
subprocess.call(["gcc","a.c","-o","x"])
subprocess.call(["./x","<inp.txt"])
兩個腳本詢問雖然終端輸入。但我認爲在第二個腳本中它應該從文件中讀取。爲什麼這兩個程序都是一樣的?
有「沒有錯,使用shell爲了方便」?你會這麼想,但如果例如用戶設置IFS?或者,因爲上面給gcc的調用沒有指定完整路徑,PATH?如果可以避免的話,最好不要使用shell來運行。 – alastair
@alastair:'$ IFS'或'$ PATH'只能從你正在執行的shell命令中改變(臨時);看我的更新如何創建shell實例,並讓我知道如果你仍然擔心修改後的環境(我可能會錯過一些東西)。也就是說,如果您還需要支持Windows(除非您故意只使用足夠簡單的命令以在兩種平臺類型上工作),那麼避免shell的一個有說服力的理由是。 – mklement0
根據'subprocess'文檔,除非明確指定環境,否則它是從Python進程繼承的。如果某人可以操縱* that *過程的環境,它仍可能導致不需要的行爲。 – alastair