鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[系统操作] 实现一个命令行参数解析器

[复制链接]
发表于 昨天 17:21 | 显示全部楼层
好像能看懂一点了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:24 From FishC Mobile | 显示全部楼层
又要学废一次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:26 From FishC Mobile | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 17:27 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 17:27 | 显示全部楼层
先背,也许以后就理解了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:28 From FishC Mobile | 显示全部楼层
学到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:28 | 显示全部楼层
import sys

def parse_args(argv):
    if not argv:
        raise SystemExit("usage: cp|mv|rm ...")
   
    command = argv[0]
    args = argv[1:]
   
    if command == "cp":
        if len(args) == 2:
            return ("copy", args[0], args[1])
        else:
            raise SystemExit("usage: cp|mv|rm ...")
    elif command == "mv":
        if len(args) == 2:
            return ("move", args[0], args[1])
        else:
            raise SystemExit("usage: cp|mv|rm ...")
    elif command == "rm":
        return ("remove", args)
    else:
        raise SystemExit("usage: cp|mv|rm ...")

if __name__ == "__main__":
    try:
        result = parse_args(sys.argv[1:])
        print(result)
    except SystemExit as e:
        print(e)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:35 From FishC Mobile | 显示全部楼层
好复杂哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:39 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:52 From FishC Mobile | 显示全部楼层
好复杂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 18:19 From FishC Mobile | 显示全部楼层
好东西,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:19 From FishC Mobile | 显示全部楼层
什么解析器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:26 | 显示全部楼层
还是菜鸟,先收藏,希望能坚持学到这里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:29 From FishC Mobile | 显示全部楼层
def parse_args(argv):
    """
    解析命令行参数
   
    Args:
        argv: 参数列表(不含程序名)
   
    Returns:
        根据命令返回相应的元组
        
    Raises:
        SystemExit: 当命令未知或参数个数不匹配时
    """
    # 检查参数列表是否为空
    if not argv:
        raise SystemExit("usage: cp|mv|rm ...")
   
    # 获取命令
    command = argv[0]
   
    # 根据不同的命令进行解析
    if command == "cp":
        # cp 命令需要恰好2个参数
        if len(argv) != 3:
            raise SystemExit("usage: cp|mv|rm ...")
        return ("copy", argv[1], argv[2])
   
    elif command == "mv":
        # mv 命令需要恰好2个参数
        if len(argv) != 3:
            raise SystemExit("usage: cp|mv|rm ...")
        return ("move", argv[1], argv[2])
   
    elif command == "rm":
        # rm 命令可以有0个或多个参数
        return ("remove", argv[1:])
   
    else:
        # 未知命令
        raise SystemExit("usage: cp|mv|rm ...")


# 测试代码
if __name__ == "__main__":
    # 测试用例
    test_cases = [
        ["cp", "a.txt", "b.txt"],
        ["mv", "old", "new"],
        ["rm", "foo"],
        ["rm", "a", "b", "c"],
        ["rm"],
        ["cp", "a"],  # 这个应该触发异常
        ["ls"]        # 这个应该触发异常
    ]
   
    for i, test_case in enumerate(test_cases):
        print(f"测试用例 {i+1}: {test_case}")
        try:
            result = parse_args(test_case)
            print(f"结果: {result}")
        except SystemExit as e:
            print(f"异常: {e}")
        print("-" * 30)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:34 | 显示全部楼层
每天进步一点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 19:48 From FishC Mobile | 显示全部楼层
紧跟甲鱼哥节奏,努力学习[加油]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 20:18 | 显示全部楼层
  1. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ cat test.py
  2. from sys import argv

  3. def parse_argv(argv):
  4.     match(argv[0]):
  5.         case "cp":
  6.             if len(argv) == 3:
  7.                 return ("copy", argv[1], argv[2])
  8.             else:
  9.                 raise SystemExit("usage:cp|mv|rm ...")
  10.         case "mv":
  11.             if len(argv) == 3:
  12.                 return ("move", argv[1], argv[2])
  13.             else:
  14.                 raise SystemExit("usage:cp|mv|rm ...")
  15.         case "rm":
  16.             return ("remove", argv[1:])
  17.         case _:
  18.             raise SystemExit("usage:cp|mv|rm ...")
  19.         
  20. if __name__ == "__main__":
  21.     _argv = argv[1:]
  22.     res = parse_argv(_argv)
  23.     print(res)

  24. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py cp a.txt b.txt
  25. ('copy', 'a.txt', 'b.txt')
  26. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py cp a.txt
  27. usage:cp|mv|rm ...
  28. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py rm
  29. ('remove', [])
  30. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py ls
  31. usage:cp|mv|rm ...
  32. (PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 20:35 | 显示全部楼层
先收藏吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:10 From FishC Mobile | 显示全部楼层
学一下()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:31 | 显示全部楼层
谢谢分享,学到了.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-27 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表