我正在使用以下代码,如果不使用参数,我想显示帮助消息。但是当我使用
parser.print_help()
时,编译器返回 NameError: name 'parser' is not defined
。如果我使用 args.print_help()
,编译器将返回 AttributeError: 'Namespace' object has no attribute 'print_help'
。
import os,subprocess,argparse
def parse_args():
parser = argparse.ArgumentParser(description='Generate a power comparision report.')
# Define command-line arguments
parser.add_argument('-t', dest='test', help='test1,tes2,...etc')
return parser.parse_args()
def main():
args = parse_args()
if args.test is None :
print("\n run will start for all test cases in 3 mins,\n following are the default values, use switches to change them")
parser.print_help()
if __name__ == "__main__":
main()
如果没有提供参数,我期待一种打印帮助消息的方法。
您需要稍微重构一下,以便 arg 解析发生在您想要打印帮助的地方。我通常这样构建事情:
#!/usr/bin/env python3
import sys
import os
import argparse
def main(args):
# Do things with args...
if __name__ == "__main__":
# Define command-line arguments
parser = argparse.ArgumentParser(description='Generate a power comparison report.')
parser.add_argument('-t', dest='test', help='test1,tes2,...etc')
# Make sure we have some command line arguments
if len(sys.argv) == 1:
parser.print_help(sys.stderr)
sys.exit(1)
else:
args = parser.parse_args()
main(args)
__name__ == "__main__"
评估为True
)我们设置我们的参数解析器。sys.argv
中只有一个参数(第一个始终是脚本的名称),那么我们知道没有传递其他参数,因此我们将帮助语句打印到 stderr
,然后退出并显示错误代码.当您使用
parser.add_argument('-t', ...)
定义参数时,该参数被视为可选(因为它以 '-'
开头)。要使其成为必需,请将 required 关键字参数添加到 add_argument()
:
def parse_args():
parser = ...
parser.add_argument('-t', dest='test', help='test1,tes2,...etc', required=True)
return parser.parse_args()
现在,如果您没有为
-t
参数指定值,您的程序将会抱怨