解析命令行参数获取两个字符串:parse_args调用次数及代码问题
问题分析与解决方案
你的代码没法正常运行的核心问题有这几点:
parse_args函数只定义了一个位置参数,但实际命令行需要解析两个参数(abc.csv和CC),解析时会直接报错。- 两次调用
parse_args完全没必要,而且sys.argv的切片逻辑错误:你的命令行下sys.argv是["abc.py", "abc.csv", "CC"],sys.argv[:-3]会得到空列表,sys.argv[-2:]包含两个参数,但你的解析器只认一个,必然触发参数不匹配的错误。 - 就算解析成功,返回的是
Namespace对象而非字符串,直接传给需要字符串参数的func也会出问题。
正确实现方式
只需要调用一次parse_args,在解析器里同时定义两个位置参数即可,代码如下:
from argparse import ArgumentParser import sys def parse_args(): parser = ArgumentParser() parser.add_argument("file", help="path to csv file") parser.add_argument("abv", help="the CC parameter") return parser.parse_args() def func(file_path, abv_str): # 这里替换成你的func实际逻辑 print(f"文件路径:{file_path},参数:{abv_str}") if __name__ == "__main__": args = parse_args() func(args.file, args.abv)
运行验证
执行命令:
python3 abc.py abc.csv CC
会输出:
文件路径:abc.csv,参数:CC
额外说明
如果不想单独封装parse_args函数,也可以直接在主逻辑里处理解析,效果完全一致。除非有特殊的拆分解析需求,否则完全没必要多次调用解析器,反而会增加代码复杂度。
内容的提问来源于stack exchange,提问作者sleepfreak
相关产品推荐
相关产品推荐

