如何为Python脚本传递多组公司名称及对应数值的命令行参数
实现方案
你提到的参数传递需求argparse完全可以支持,这里提供两种适配不同场景的实现方式:
方法1:完全匹配你期望的无标记成对传参
直接读取所有位置参数后自行按两两分组即可,调用格式和你要求的完全一致:
import argparse def main(): parser = argparse.ArgumentParser(description='批量处理公司关联数值') # 接收所有传入的位置参数 parser.add_argument('params', nargs='+', help='成对传入的公司名称与对应数值,示例:"Company 1" 5 "Company 2" 9') args = parser.parse_args() # 校验参数数量是否为偶数 if len(args.params) % 2 != 0: parser.error('参数必须成对传入,格式为:公司名 数值 公司名 数值 ...') # 组装为可用的业务结构 company_data = {} for i in range(0, len(args.params), 2): company_name = args.params[i] try: related_value = int(args.params[i+1]) except ValueError: parser.error(f'参数 {args.params[i+1]} 不是合法的数值类型') company_data[company_name] = related_value # 此处写入你的业务逻辑 print(company_data) if __name__ == '__main__': main()
调用示例:python myscript.py "Company 1" 5 "Company 2" 9 "Company 3" 15
方法2:显式标记分组的健壮方案(推荐)
如果要避免用户误传参数顺序、漏传参数,建议用重复标记的方式实现,容错率更高:
import argparse def main(): parser = argparse.ArgumentParser(description='批量处理公司关联数值') # 允许重复调用--add参数,每组自动接收2个值 parser.add_argument('--add', nargs=2, action='append', required=True, metavar=('公司名', '数值'), help='添加一组公司与对应数值,可多次使用该参数') args = parser.parse_args() company_data = {} for company_name, value_str in args.add: try: related_value = int(value_str) except ValueError: parser.error(f'公司 {company_name} 对应的数值 {value_str} 不合法') company_data[company_name] = related_value # 此处写入你的业务逻辑 print(company_data) if __name__ == '__main__': main()
调用示例:python myscript.py --add "Company 1" 5 --add "Company 2" 9 --add "Company 3" 15
内容的提问来源于stack exchange,提问作者Krowi
相关产品推荐
相关产品推荐

