小生臣巳水 发表于 2025-9-26 17:21:21

好像能看懂一点了

tkiss 发表于 2025-9-26 17:24:57

又要学废一次

Pioneer. 发表于 2025-9-26 17:26:46

学习

soonkuayue 发表于 2025-9-26 17:27:11

看看

kumu27 发表于 2025-9-26 17:27:36

先背,也许以后就理解了

理智型 发表于 2025-9-26 17:28:03

学到了

小坛砸 发表于 2025-9-26 17:28:43

import sys

def parse_args(argv):
    if not argv:
      raise SystemExit("usage: cp|mv|rm ...")
   
    command = argv
    args = argv
   
    if command == "cp":
      if len(args) == 2:
            return ("copy", args, args)
      else:
            raise SystemExit("usage: cp|mv|rm ...")
    elif command == "mv":
      if len(args) == 2:
            return ("move", args, args)
      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)
      print(result)
    except SystemExit as e:
      print(e)

KentChen 发表于 2025-9-26 17:35:26

好复杂哦

tim0018 发表于 2025-9-26 17:39:23

学习学习

wms1717 发表于 2025-9-26 17:52:32

好复杂

SQ551 发表于 2025-9-26 18:19:04

好东西,学习了

clollipops 发表于 2025-9-26 19:19:55

什么解析器

petite6er 发表于 2025-9-26 19:26:07

还是菜鸟,先收藏,希望能坚持学到这里

mqq20030624 发表于 2025-9-26 19:29:01

def parse_args(argv):
    """
    解析命令行参数
   
    Args:
      argv: 参数列表(不含程序名)
   
    Returns:
      根据命令返回相应的元组
      
    Raises:
      SystemExit: 当命令未知或参数个数不匹配时
    """
    # 检查参数列表是否为空
    if not argv:
      raise SystemExit("usage: cp|mv|rm ...")
   
    # 获取命令
    command = argv
   
    # 根据不同的命令进行解析
    if command == "cp":
      # cp 命令需要恰好2个参数
      if len(argv) != 3:
            raise SystemExit("usage: cp|mv|rm ...")
      return ("copy", argv, argv)
   
    elif command == "mv":
      # mv 命令需要恰好2个参数
      if len(argv) != 3:
            raise SystemExit("usage: cp|mv|rm ...")
      return ("move", argv, argv)
   
    elif command == "rm":
      # rm 命令可以有0个或多个参数
      return ("remove", argv)
   
    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)

Mechanic 发表于 2025-9-26 19:34:42

每天进步一点

大山888 发表于 2025-9-26 19:48:02

紧跟甲鱼哥节奏,努力学习[加油]

pyzyd 发表于 2025-9-26 20:18:45

(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ cat test.py
from sys import argv

def parse_argv(argv):
    match(argv):
      case "cp":
            if len(argv) == 3:
                return ("copy", argv, argv)
            else:
                raise SystemExit("usage:cp|mv|rm ...")
      case "mv":
            if len(argv) == 3:
                return ("move", argv, argv)
            else:
                raise SystemExit("usage:cp|mv|rm ...")
      case "rm":
            return ("remove", argv)
      case _:
            raise SystemExit("usage:cp|mv|rm ...")
      
if __name__ == "__main__":
    _argv = argv
    res = parse_argv(_argv)
    print(res)

(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py cp a.txt b.txt
('copy', 'a.txt', 'b.txt')
(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py cp a.txt
usage:cp|mv|rm ...
(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py rm
('remove', [])
(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$ python test.py ls
usage:cp|mv|rm ...
(PaChong) pyzyd@DESKTOP-6QOJ4HD:~/PythonProject/PaChong/Lianxis$

fishgood1981 发表于 2025-9-26 20:35:30

先收藏吧

忘川hd 发表于 2025-9-26 22:10:28

学一下()

小芒果炒酸奶 发表于 2025-9-26 22:31:15

谢谢分享,学到了.
页: 1 [2] 3 4
查看完整版本: 实现一个命令行参数解析器