私はこのように使われることを意図したスクリプトを持っています:usage: installer.py dir [-h] [-v]
dir
は、次のように定義された位置引数です。
parser.add_argument('dir', default=os.getcwd())
私はdir
をオプションにしたいです:それが指定されていないときそれはちょうどcwd
であるべきです。
残念ながら、dir
引数を指定しないと、Error: Too few arguments
が返されます。
nargs='?'
(または複数のディレクトリが必要な場合はnargs='*'
)を使用してください。
parser.add_argument('dir', nargs='?', default=os.getcwd())
拡張例:
>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]
positional arguments:
dir
optional arguments:
-h, --help show this help message and exit
-v
@VinaySajip答えへの延長として。 言及するに値する追加のnargs
があります 。
parser.add_argument('dir', nargs=1, default=os.getcwd())
N(整数)コマンドラインからのN個の引数はリストにまとめられます
parser.add_argument('dir', nargs='*', default=os.getcwd())
'*'存在するすべてのコマンドライン引数はリストにまとめられます。 注 nargs='*'
を持つ複数の位置引数を持つことは一般的にあまり意味がありませんが、nargs='*'
を持つ複数のオプション引数が可能です。
parser.add_argument('dir', nargs='+', default=os.getcwd())
「+」 '*'と同じように、存在するすべてのコマンドライン引数がリストにまとめられています。さらに、少なくとも1つのコマンドライン引数が存在しない場合、エラーメッセージが表示されます。
parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())
argparse.REMAINDER
。残りのコマンドライン引数はすべてリストにまとめられています。これは一般に、他のコマンドラインユーティリティにディスパッチするコマンドラインユーティリティに役立ちます。
nargs
キーワード引数が指定されていない場合、消費される引数の数はアクションによって決まります。一般に、これは単一のコマンドライン引数が消費され、単一の項目(リストではない)が生成されることを意味します。