web-dev-qa-db-ja.com

コードにオプションが指定されていない場合に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"

使用状況を出力するのは、次の方法で実行した場合のみです。

$ 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使用法を印刷するためのオプション。どうやってやるの?

14
neversaint

その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()

はい、すべてのnamespace引数でデフォルト値を確認できますが、引数が多いと古くなります。しかし、ここでは、引数文字列があるかどうかを確認しています。ない場合は、パーサー独自のヘルプ関数を呼び出します。

ipythonは、ヘルプを生成するためにこのようなことを行います。 sys.argvhelpのバージョンをチェックし、parserを定義する前に、独自のヘルプメッセージを生成します。

16
hpaulj
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()
2
hd1

「-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
1
chepner