Python调用Shell脚本执行apt卸载时跳过y/n确认无响应如何解决
故障原因
你在Python侧写入yes\n的标准输入仅传递给了顶层的Shell脚本进程,而Shell脚本内部的3条apt命令是各自独立的子进程,无法接收到外层Shell的输入内容,因此apt卡在交互确认环节无法继续执行,最终表现为无执行效果。
解决方案
方案1:添加apt自动确认参数(推荐)
apt命令原生支持-y参数,可自动应答所有交互确认项,无需额外手动传值。修改后的Shell脚本如下:
echo *MY PASSWORD* | sudo -S apt-get --purge remove -y *PROGRAM* echo *MY PASSWORD* | sudo -S apt-get autoremove -y echo *MY PASSWORD* | sudo -S apt-get clean
对应可简化Python代码,删除不必要的stdin写入逻辑:
import subprocess self.shellscript = subprocess.Popen([self.shellScriptPath], shell=True) self.returncode = self.shellscript.wait()
方案2:Shell内部传递确认输入
如果不修改apt命令参数,也可以在Shell脚本内通过yes命令直接给对应apt进程传递确认值:
echo *MY PASSWORD* | sudo -S yes | apt-get --purge remove *PROGRAM* echo *MY PASSWORD* | sudo -S yes | apt-get autoremove echo *MY PASSWORD* | sudo -S apt-get clean
内容的提问来源于stack exchange,提问作者Teer 2008
相关产品推荐
相关产品推荐

