在没有任何参数的情况下调用脚本时,用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.