如何配置argparse可选参数 无需指定输出文件名即可运行
问题原因
你定义--json/--bibtex/--html三个参数时指定了type=str,argparse会默认这类参数必须接收一个字符串值,所以你输入的inputfilename会被识别为--json的参数值,导致最后缺失必填的输入文件名参数。
修改方案
只需要调整三个格式参数的配置,把type=str替换为action='store_true'即可。action='store_true'的作用是:只要命令行传入了对应选项,参数值就自动设为True,不需要额外传参数值,完全匹配你只把它当格式标识的需求。
另外你原有代码里有个笔误:你定义的位置参数名是inputfilename,但取值时写的是args.filename,会触发属性不存在的报错,顺便调整即可。
修改后完整代码
import sys import argparse parser = argparse.ArgumentParser(description='Convert file to new type') # 仅修改下面三行配置,替换type=str为action='store_true' parser.add_argument('--json', action='store_true', help='Converts to json format') parser.add_argument('--bibtex', action='store_true', help='Converts to bibtex format') parser.add_argument('--html', action='store_true', help='Converts to html format') parser.add_argument('inputfilename', type=str, help='enter the original filename') args = parser.parse_args() # 修正参数名笔误 filename = args.inputfilename if args.json: print('Converting to json ...') #conversion code here elif args.bibtex: print('Converting to bibtex ...') #conversion code here elif args.html: print('Converting to html ...') #conversion code here else: print('No conversion type indicated')
测试效果
执行命令./orsconvert.py --json inputfilename即可正常运行,不需要额外传入输出文件名,你可以在转换逻辑部分自行实现输出文件名的生成规则。
内容的提问来源于stack exchange,提问作者mdign002
相关产品推荐
相关产品推荐

