次のように使用するためのスクリプトがあります。
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
キーワード引数が指定されていない場合、消費される引数の数はアクションによって決まります。通常、これは単一のコマンドライン引数が消費され、単一のアイテム (リストではない) が生成されることを意味します。
編集 (@Acumenus のコメントからコピー) nargs='?'
ドキュメントには、「?」と書かれています。1 つの引数は、可能であればコマンド ラインから消費され、単一のアイテムとして生成されます。コマンドライン引数が存在しない場合、デフォルトの値が生成されます。
parser.add_argument
スイッチも必要です。使用できますrequired=False
。Python 2.7 のサンプル スニペットを次に示します。
parser = argparse.ArgumentParser(description='get dir')
parser.add_argument('--dir', type=str, help='dir', default=os.getcwd(), required=False)
args = parser.parse_args()