在没有给cod选项的情况下如何使用argparse打印

2024-06-12 08:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

使用以下代码:

import argparse
parser = argparse.ArgumentParser(description="Prepare something code.")
parser.add_argument("-t","--tabular", help="print something in tabular way for EXCEL",
                      action="store_true")
parser.add_argument("-v","--verbose", action="store_true")
args = parser.parse_args()
if args.tabular:
    print "Tabular print"
elif args.verbose:
    print "VERBOSE"

只有当我按以下方式执行时,它才会打印用法:

$ python mycode.py -h
usage: mycode.py [-h] [-t] [-v]

Prepare something code.

optional arguments:
  -h, --help     show this help message and exit
  -t, --tabular  print something in tabular way for EXCEL
  -v, --verbose

我想做的是简单地运行代码:$ my code.py而不使用任何-h选项来打印用法。我该怎么做?


Tags: 代码inpyaddparserverboseargparsehelp
3条回答

2010年的问题涵盖了同样的内容,但只有一个答案。虽然这个答案间接来自argparse的设计者,但它并没有涵盖所有的可能性。

这里有一个让我惊讶的简单:

import sys
parser = ...
if len(sys.argv[1:])==0:
    parser.print_help()
    # parser.print_usage() # for just the usage line
    parser.exit()
args = parser.parse_args()

是的,您可以检查所有namespace参数的默认值,但如果有很多参数,则会变旧。但这里我只是检查是否有任何参数字符串。如果没有,则调用解析器自己的帮助函数。

ipython执行类似的操作来生成帮助。它检查sys.argv是否有help的某些版本,并在定义parser之前生成自己的帮助消息。

如果您需要使用“-t”或“-v”中的一个,则它们不是真正的可选选项。我将使用位置参数代替:

import argparse
parser = argparse.ArgumentParser(description="Prepare something code.")
parser.add_argument("type", choices=("tabular", "verbose", "t", "v"))
args = parser.parse_args()
if args.type in ("tabular", "t"):
    print "Tabular print"
else:  # Must be "verbose" or "v"
    print "VERBOSE"

然后将使用以下方法之一调用您的程序:

$ my_code t
$ my_code tabular
$ my_code v
$ my_code verbose

没有争论会产生

$ my_code
usage: my_code [-h] {tabular,verbose,t,v}
my_code: error: too few arguments
import argparse
parser = argparse.ArgumentParser(description="Prepare something code.")
parser.add_argument("-t","--tabular", help="print something in tabular way for EXCEL",
                      action="store_true")
parser.add_argument("-v","--verbose", action="store_true")
args = parser.parse_args()
if args.tabular:
    print "Tabular print"
elif args.verbose:
    print "VERBOSE"
else:
    print parser.print_help()

相关问题 更多 >