1. 基础确认机制

基础确认机制:用户确认输入 学习卡片

任务目标

构建一个命令行工具,在执行删除文件这类不可逆操作前,强制要求用户输入 y 进行确认。若用户未输入 y(包括输入 n、其他字符或直接回车),则取消操作并给出提示。该案例演示人机协同中最基础的“关键操作前二次确认”护栏模式。

实现方案

使用 Python 标准库 os 和 sys,不依赖任何第三方包。核心逻辑为:

  1. 接收命令行参数作为目标文件路径;
  2. 展示将要执行的操作并请求确认;
  3. 仅当用户输入严格等于 y 时执行删除,否则安全退出。

完整代码

import os
import sys

def confirm_and_delete(filepath):
    """删除前要求用户输入'y'确认,否则取消操作。"""
    if not os.path.exists(filepath):
        print(f"错误:文件不存在 - {filepath}")
        return False

    print(f"即将删除文件:{filepath}")
    print("此操作不可撤销。")

    # 核心确认逻辑:仅接受精确的 'y'
    user_input = input("请输入 'y' 确认删除,输入其他任意内容取消:").strip().lower()

    if user_input != 'y':
        print("操作已取消。")
        return False

    try:
        os.remove(filepath)
        print(f"已删除:{filepath}")
        return True
    except Exception as e:
        print(f"删除失败:{e}")
        return False

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法:python confirm_delete.py <目标文件路径>")
        sys.exit(1)

    target = sys.argv[1]
    success = confirm_and_delete(target)
    sys.exit(0 if success else 1)

运行与验证

运行方式:

# 准备测试文件
echo "测试内容" > /tmp/test_file.txt

# 运行程序(传入文件路径)
python confirm_delete.py /tmp/test_file.txt

验证路径与通过条件:

场景输入预期结果判定标准
确认删除y文件被删除,输出“已删除”ls /tmp/test_file.txt 提示不存在,程序退出码为 0
取消删除n 或直接回车文件保留,输出“操作已取消”ls /tmp/test_file.txt 仍能看到文件,程序退出码为 1
文件不存在任意提示“文件不存在”程序退出码为 1,无删除动作

关键说明:

  • 确认输入使用 .strip().lower() 归一化,因此 Y 或带空格的 y 均视为有效确认;
  • 除 y 外的任何输入(包括 yes、Y 以外的组合)都会触发取消分支,确保护栏的严格性;
  • 程序退出码可用于脚本自动化集成:0 表示删除成功,1 表示取消或失败。
确认机制流程 接收文件路径 文件存在? os.path.exists 否 报错并退出(码1) 是 显示警告信息 请求输入确认 输入 == 'y'? strip().lower() 否 是 os.remove() 退出(码0)