Python中如何用argparse.ArgumentParser解析程序内字符串参数?
用argparse解析程序内字符串参数
当然可以,argparse.ArgumentParser完全支持解析程序内定义的字符串,核心是把目标字符串转换成符合命令行参数格式的列表,再传给parse_args()方法(该方法默认读取命令行参数,但也接受自定义参数列表)。
方法1:过滤无关内容,仅解析目标参数
如果字符串前面有不需要的内容,先提取出从第一个--开始的参数部分,再分割解析:
import argparse s = "A rocket in the sky --height 512 --width 512" # 提取参数部分 args_start = s.find("--") args_list = s[args_start:].split() if args_start != -1 else [] # 创建解析器并定义参数 parser = argparse.ArgumentParser() parser.add_argument("--height", type=int) parser.add_argument("--width", type=int) # 解析参数 args = parser.parse_args(args_list) print(args.height) # 输出:512 print(args.width) # 输出:512
方法2:用shlex.split处理复杂字符串(推荐)
如果字符串包含带空格的参数(比如带引号的内容),普通的split()会出错,此时用shlex.split()能正确解析命令行风格的字符串,同时还可以保留前面的非参数内容:
import argparse import shlex s = "A rocket in the sky --height 512 --width 512" # 用shlex分割字符串,模拟命令行参数解析逻辑 args_list = shlex.split(s) # 创建解析器,添加位置参数接收前面的描述内容 parser = argparse.ArgumentParser() parser.add_argument("description", nargs="*") # 接收所有非选项参数 parser.add_argument("--height", type=int) parser.add_argument("--width", type=int) # 解析参数 args = parser.parse_args(args_list) print(args.description) # 输出:['A', 'rocket', 'in', 'the', 'sky'] print(args.height) # 输出:512 print(args.width) # 输出:512
关键说明
parse_args()方法接受一个列表参数,只要列表元素符合命令行参数的格式(比如选项--height后跟对应值),就能正常解析。shlex.split()会严格按照命令行的参数规则分割字符串,比如自动处理带引号的参数,比str.split()更可靠。
内容的提问来源于stack exchange,提问作者easonoob
相关产品推荐
相关产品推荐

