如何在Python中自动回应unzip命令的文件替换询问?
解决unzip解压时自动应答覆盖询问的问题
首先修正你当前代码的一个问题:循环里每次执行unzip '*.zip'会重复解压所有zip文件,应该改成逐个处理每个目标zip:
import os import subprocess os.chdir("path-to-directory") for zip_file in os.listdir(): if zip_file.endswith(".zip"): subprocess.run(["unzip", zip_file])
接下来分两种场景实现自动应答需求:
场景1:多数zip自动选[A]ll,特定文件(如archiveb.zip)选[y]es
如果需要严格对应“遇到询问时输入A或y”的交互逻辑,可以通过subprocess的标准输入传递应答内容:
import os import subprocess os.chdir("path-to-directory") for zip_file in os.listdir(): if zip_file.endswith(".zip"): # 根据文件名决定应答内容,注意要加换行符模拟回车 if zip_file == "archiveb.zip": # 每次覆盖询问都回复y,若有多个文件需覆盖可重复输入:比如b'y\n' * 5 input_bytes = b'y\n' else: # 一次回复A,同意所有覆盖 input_bytes = b'A\n' subprocess.run( ["unzip", zip_file], input=input_bytes, stdin=subprocess.PIPE, # 可选:如果不需要终端输出,加上 stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL )
场景2:用unzip内置参数更高效处理
如果你的需求可以简化为“强制覆盖所有文件”(等价于自动选[A]ll)和“自动同意所有询问”(等价于每次选[y]es),直接用unzip的命令行参数更稳定:
import os import subprocess os.chdir("path-to-directory") for zip_file in os.listdir(): if zip_file.endswith(".zip"): unzip_args = ["unzip"] if zip_file == "archiveb.zip": unzip_args.append("-y") # 对所有询问自动回复yes else: unzip_args.append("-o") # 强制覆盖所有文件,不弹出询问 unzip_args.append(zip_file) subprocess.run(unzip_args)
说明:-o参数会直接覆盖现有文件,完全跳过询问;-y参数会自动对所有交互询问回复yes,效果和每次输入y一致。
内容的提问来源于stack exchange,提问作者ktb
相关产品推荐
相关产品推荐

