識別 python 腳本何時等待手動輸入

識別 python 腳本何時等待手動輸入

我正在編寫一個執行 Python 腳本的 shell 腳本。 Python 腳本暫停以提供手動輸入。但是,我不想每次都在腳本中按 Enter 鍵。相反,我想傳遞正在執行的 shell 腳本中的手動輸入。

請幫忙,是否有辦法做到這一點?

答案1

如果只需要一個輸入,只需使用echo一個管道:

echo | python script.py

echo將空白行(帶有換行符)列印到標準輸出,然後我們將其重定向到 Python 腳本的輸入使用|。當Python從標準輸入讀取時,它將得到一個空行並繼續。

如果腳本需要多次按 Enter 鍵,您可以使用yes命令和一個管道:

yes "" | python script.py

yes命令一遍又一遍地將同一行列印到標準輸出。預設情況下,字串是y,但這裡我們將其設定為空字串,因此它永遠只是換行符。


如果需要輸入作為對特定提示的回應,並且在其他時候您需要不同的輸入,請使用expect,這是「一個 Tcl 擴展,可以讓您自動與互動式程式進行互動」。

可以編寫 shell 腳本,以便它從 Python 的輸出中讀取並為其產生新的輸入,但我並不特別推薦它。如果您想這樣做,請參閱進階 Bash 腳本編寫指南中的 IO 重定向:您需要克隆文件描述符才能做到這一點。您也可以使用mkfifo並建立命名管道文件,然後正常讀取和寫入它們。

老實說,如果您達到執行以下任一方法的目的,我會開始考慮替代方法:shell 腳本並不是為此構建的,並且編寫腳本會更直接,例如, Python 本身。

相關內容