如果没有给代码选项,如何使用argparse打印

nev*_*int 13 python argparse

使用以下代码:

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"
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

我想要做的就是简单地运行代码:$ my code.py没有任何-h选项来打印用法.我怎样才能做到这一点?

hpa*_*ulj 14

2010年的问题涵盖了同样的问题,但只有1个答案.虽然这个答案间接来自设计师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()
Run Code Online (Sandbox Code Playgroud)

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

ipython做这样的事情来产生帮助.它甚至在定义之前检查sys.argv某些版本help,并生成自己的帮助消息parser.

  • `len(sys.argv[1:])==0` 是一种冗长的写法 `len(sys.argv)==1`。 (3认同)

hd1*_*hd1 3

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()
Run Code Online (Sandbox Code Playgroud)