当前位置: 首页 > 面试题库 >

在不带任何参数的情况下调用脚本时,使用python argparse显示帮助消息

越涵衍
2023-03-14
问题内容

这可能很简单。假设我有一个使用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()

请注意,无论何时error 触发该方法,上述解决方案都会打印帮助消息。例如,test.py --blah如果--blah不是有效的选项,还将打印帮助消息。

如果仅在命令行中未提供任何参数的情况下才要打印帮助消息,则也许这仍然是最简单的方法:

import argparse
import sys

parser=argparse.ArgumentParser()
parser.add_argument('foo', nargs='+')
if len(sys.argv)==1:
    parser.print_help(sys.stderr)
    sys.exit(1)
args=parser.parse_args()

请注意,parser.print_help()默认情况下会打印到标准输出。正如init_js建议的那样,用于parser.print_help(sys.stderr)打印到stderr。



 类似资料:
  • 本文向大家介绍winforms 使用帮助类显示帮助,包括了winforms 使用帮助类显示帮助的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我喜欢javascript,所以当我听说基于V8的Javascript运行时Node.js时,我感到非常兴奋。我更喜欢用Javascript编写外壳脚本。我的问题是:如何在不调用的情况下运行脚本?在我编写完脚本之后,它会尝试作为bash脚本而不是Node.js javascript运行。 问题答案: 使您当前的外壳开始bash的原因是您当前的外壳(bash?)不知道如何处理file.j

  • 问题内容: 通常,要将调试器附加到正在运行的jvm,您需要使用以下参数启动jvm: 现在,如果我要调试不是在调试模式下启动的进程,该怎么办? 当生产系统(即在没有调试args的情况下启动)显示“随机”(我用宽松的术语)错误时,就会出现这种情况。因此,我无法使用适当的参数重新启动jvm,因为没人知道如何再次再现该错误。在这种情况下是否不可能附加到JVM? 只是为了澄清,除非将它们以调试方式启动,否则

  • 问题内容: 我有一个带有GET处理程序的简单控制器,该处理程序接受一个对象来绑定请求参数: 这是一个简单的POJO类: 一切正常,但我想摆脱设置者,使该对象不可变为公共使用。在Spring 5.0.2 之前的处理程序方法文档中,我们了解到可能的有效方法参数是: 命令或表单对象将请求参数绑定到Bean属性(通过设置器) 或直接 绑定 到字段 是否可以以某种方式覆盖默认的Spring Boot配置,以

  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?