我正試圖用python和shell腳本來自動洗掉一個程式。 這是我用來執行shell腳本的代碼。
import subprocess
self.shellscript = subprocess.Popen([self.shellScriptPath], shell=True, stdin=subprocess.PIPE )
self.shellscript.stdin.write('yes
'.encode("utf-8" ))
self.shellscript.stdin.close()
self.returncode = self.shellscript.wait()
這是我要運行的shell腳本。
echo *MY PASSWORD* | sudo -S apt-get --purge remove *PROGRAM*
echo *MY PASSWORD* | sudo -S apt-get autoremove
echo *MY PASSWORD* | sudo -S apt-get clean
我知道像這樣把我的密碼編碼進去是不安全的,但我以后會解決這個問題。
我的問題是,命令列要求我輸入y/n,但程式跳過了這一點,什么也沒有發生。
uj5u.com熱心網友回復:
在這種特殊情況下,絕對最簡單的修復方法是使用
apt-get -y ...
并且完全不需要向命令傳遞輸入。
在一般情況下,你想在所有可能的情況下避免Popen。 你正在重新實作 subprocess.call(),但沒有完全做到。 你的整個嘗試可以簡化為(并且用)
self.returncode = subprocess.run(
self.shellScriptPath, input='yes
', text=True).returncode
除非self.shellScriptPath中的命令需要一個shell,可能要洗掉shell=True,如果有必要,shlex.split()值變成一個令牌串列(當然,如果它已經是一個單一的令牌,只要自己分割,很瑣碎。[self.shellScriptPath])。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327317.html
標籤:
上一篇:命令來列印目錄中像素大小的影像。
下一篇:是的,重復程式/否,退出
