在没有任何参数的情况下调用脚本时,用python argparse显示帮助信息
这可能是一个简单的。 假设我有一个使用argparse来处理命令行参数/选项的程序。 以下将打印“帮助”消息:
./myprogram -h
要么:
./myprogram --help
但是,如果我没有任何争论地运行脚本,它什么也不做。 我想要它做的是显示使用消息,当它被调用没有参数。 这是怎么做的?
这个答案来自于Google小组的 Steven Bethard。 为了让没有Google帐户的用户能够更轻松地访问,我将其重新发布。
您可以覆盖error
方法的默认行为:
import argparse import sys class MyParser(argparse.ArgumentParser): def error(self, message): sys.stderr.write('error: %s\n' % message) self.print_help() sys.exit(2) parser=MyParser() parser.add_argument('foo', nargs='+') args=parser.parse_args()
请注意,上述解决scheme将在触发error
方法时打印帮助消息。 例如,如果--blah
不是有效的选项, test.py --blah
也会打印帮助信息。
如果只在命令行中没有提供参数的情况下打印帮助信息,那么也许这仍然是最简单的方法:
import argparse import sys parser=argparse.ArgumentParser() parser.add_argument('foo', nargs='+') if len(sys.argv)==1: parser.print_help() sys.exit(1) args=parser.parse_args()
而不是写一个类,try / except可以用来代替
try: options = parser.parse_args() except: parser.print_help() sys.exit(0)
好处是工作stream程更清晰,不需要存根类。 缺点是第一个“使用”行被打印两次。
这将需要至less一个强制性的参数。 没有强制参数,在命令行中提供零参数是有效的。
有了argparse,你可以做:
parser.argparse.ArgumentParser() #parser.add_args here #sys.argv includes a list of elements starting with the program if len(sys.argv) < 2: parser.print_usage() sys.exit(1)
如果您必须为运行脚本指定参数,请使用ArgumentParser 所需的参数,如下所示:
parser.add_argument('--foo', required=True)
如果脚本运行时没有任何参数,parse_args()将报告一个错误。
把我的版本扔进这堆:
import argparse parser = argparse.ArgumentParser() args = parser.parse_args() if not vars(args): parser.print_help() parser.exit(1)
您可能会注意到parser.exit
– 我主要这样做,因为它保存了一个导入行,如果这是文件中sys
的唯一原因…
如果您将(子)parsing器的默认函数关联起来,就像在add_subparsers
下提到的add_subparsers
,您可以简单地将它添加为默认的操作:
parser = argparse.ArgumentParser() parser.set_defaults(func=lambda x: parser.print_usage()) args = parser.parse_args() args.func(args)
如果由于缺less位置参数而引发exception,请添加try-except。
用nargs设置你的位置参数,并检查位置参数是否为空。
import argparse parser = argparse.ArgumentParser() parser.add_argument('file', nargs='?') args = parser.parse_args() if not args.file: parser.print_help()
参考Python nargs
你可以使用optparse
from optparse import OptionParser, make_option parser = OptionParser() parser.add_option('--var', help='put the help of the commandline argument') (options, args) = parser.parse_args() ./myprogram --help will print all the help messages for each given argument.
from optparse import OptionParser, make_option parser = OptionParser() parser.add_option('--var', help='put the help of the commandline argument') (options, args) = parser.parse_args() ./myprogram --help will print all the help messages for each given argument.