在函数中声明argparse解析器时,如何打印帮助信息?
解决无参数时打印帮助信息的问题
你的问题核心是解析器对象的作用域问题:parser是parse_args()函数内的局部变量,main()函数无法直接访问;而args是解析后返回的Namespace实例,本身没有print_help()方法。以下是两种直接可行的修复方案:
方案一:返回解析器与参数对象
修改parse_args()函数,同时返回parser和args,让main()能调用解析器的print_help()方法:
import os, subprocess, argparse def parse_args(): parser = argparse.ArgumentParser(description='Generate a power comparison report.') parser.add_argument('-t', dest='test', help='test1,test2,...etc') args = parser.parse_args() return parser, args # 同时返回解析器和参数 def main(): parser, args = parse_args() if args.test is None: print("\nRun will start for all test cases in 3 mins,\nFollowing are the default values, use switches to change them") parser.print_help() if __name__ == "__main__": main()
方案二:利用argparse原生必填参数校验
如果要求用户必须传入-t参数,可将其设为必填,argparse会自动在无参数时打印帮助并退出:
import os, subprocess, argparse def parse_args(): parser = argparse.ArgumentParser(description='Generate a power comparison report.') # 设置required=True,无参数时自动触发帮助信息 parser.add_argument('-t', dest='test', required=True, help='test1,test2,...etc') return parser.parse_args() def main(): args = parse_args() # 正常业务逻辑 if __name__ == "__main__": main()
额外方案:检测无任何输入参数
如果仅需在完全没有传入任何参数时打印帮助,可通过sys.argv长度判断:
import os, subprocess, argparse, sys def main(): if len(sys.argv) == 1: parser = argparse.ArgumentParser(description='Generate a power comparison report.') parser.add_argument('-t', dest='test', help='test1,test2,...etc') print("\nRun will start for all test cases in 3 mins,\nFollowing are the default values, use switches to change them") parser.print_help() sys.exit(0) args = argparse.ArgumentParser(description='Generate a power comparison report.').parse_args() # 后续逻辑 if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者Sachin Mirajkar
相关产品推荐
相关产品推荐

