You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:10:26