使用Python subprocess模块调用pip uninstall时输入确认无效问题排查
解决pip uninstall自动确认无效的问题
看起来你遇到了两个关键问题导致自动确认没生效,咱们一步步拆解解决:
1. 先修正变量名的低级错误
你第1行定义的变量是any_repo='libclang-py3',但第2行里却用了libclang_repo——这会直接抛出NameError,程序根本走不到第3行就报错了。先把变量名统一:
any_repo='libclang-py3' uninstall_dependency=subprocess.Popen(["python3","-m","pip","uninstall", any_repo], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
2. 输入需要是字节流而非字符串
在Python 3中,subprocess.Popen.communicate()的input参数要求传入字节类型的数据,你传入的字符串'y'系统是无法识别的。另外还要加上换行符\n,模拟终端输入后按回车的操作:
(output, err) = uninstall_dependency.communicate(input=b'y\n', timeout=20)
更省心的替代方案:直接跳过确认提示
其实不用手动传输入这么麻烦,pip本身支持-y(或--yes)参数,可以直接跳过确认环节,一步完成卸载,代码也更简洁可靠:
import subprocess any_repo='libclang-py3' # 添加-y参数自动确认卸载 uninstall_dependency=subprocess.Popen(["python3","-m","pip","uninstall", "-y", any_repo], stderr=subprocess.PIPE, stdout=subprocess.PIPE) (output, err)=uninstall_dependency.communicate(timeout=20) # 把字节输出转成字符串更易读 print("Output is %s and Error is %s"%(output.decode('utf-8'), err.decode('utf-8')))
内容的提问来源于stack exchange,提问作者abhishek kumar
相关产品推荐
相关产品推荐

