如何按字母顺序打印argparse解析后的命令行参数?
按字母顺序打印argparse参数的方法
这里有两种简洁规范的方式实现需求:
方法1:转换为有序结构后格式化输出
把args对象转为字典,对键值对按字母排序后,手动拼接成类似Namespace的格式:
import argparse parser = argparse.ArgumentParser('Some program', add_help=False) parser.add_argument('--bb', type=str) parser.add_argument('--aa', type=str) args = parser.parse_args() # 转换为排序后的键值对列表 sorted_args = sorted(vars(args).items()) # 格式化为Namespace风格的字符串 print(f"Namespace({', '.join([f'{k}={repr(v)}' for k, v in sorted_args])})")
执行后会输出Namespace(aa=..., bb=...),完全符合预期。
方法2:自定义Namespace类修改默认输出逻辑
通过自定义argparse.Namespace的子类,重写__repr__方法,让它默认按字母顺序打印参数:
import argparse class SortedNamespace(argparse.Namespace): def __repr__(self): sorted_items = sorted(vars(self).items()) items_str = ', '.join([f'{k}={repr(v)}' for k, v in sorted_items]) return f'SortedNamespace({items_str})' parser = argparse.ArgumentParser('Some program', add_help=False) parser.add_argument('--bb', type=str) parser.add_argument('--aa', type=str) # 指定parse_args返回自定义的Namespace实例 args = parser.parse_args(namespace=SortedNamespace()) print(args)
这种方式更灵活,后续所有print(args)都会自动按字母顺序输出参数。
内容的提问来源于stack exchange,提问作者f10w
相关产品推荐
相关产品推荐

