小生臣巳水
发表于 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
谢谢分享,学到了.