781

次のように使用するためのスクリプトがあります。 usage: installer.py dir [-h] [-v]

dir次のように定義される位置引数です。

parser.add_argument('dir', default=os.getcwd())

dirをオプションにしたい: 指定されていない場合は、 にする必要がありますcwd

dir残念ながら、引数を指定しないと、 Error: Too few arguments.

4

3 に答える 3

995

使用する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
于 2010-12-18T21:15:47.263 に答える
87

@VinaySajipの回答の拡張として。言及する価値がある追加がありますnargs

  1. parser.add_argument('dir', nargs=1, default=os.getcwd())

N (整数)。コマンドラインからの N 個の引数がリストにまとめられます

  1. parser.add_argument('dir', nargs='*', default=os.getcwd())

「*」。存在するすべてのコマンドライン引数がリストにまとめられます。で複数の位置引数を持つことは一般的にあまり意味がありませんnargs='*'、複数のオプションの引数を持つnargs='*'ことは可能です。

  1. parser.add_argument('dir', nargs='+', default=os.getcwd())

「+」。「*」と同様に、存在するすべてのコマンドライン引数がリストにまとめられます。さらに、少なくとも 1 つのコマンド ライン引数が存在しない場合は、エラー メッセージが生成されます。

  1. parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())

argparse.REMAINDER. 残りのすべてのコマンドライン引数がリストにまとめられます。これは、他のコマンド ライン ユーティリティにディスパッチするコマンド ライン ユーティリティに一般的に役立ちます。

nargsキーワード引数が指定されていない場合、消費される引数の数はアクションによって決まります。通常、これは単一のコマンドライン引数が消費され、単一のアイテム (リストではない) が生成されることを意味します。

編集 (@Acumenus のコメントからコピー) nargs='?' ドキュメントには、「?」と書かれています。1 つの引数は、可能であればコマンド ラインから消費され、単一のアイテムとして生成されます。コマンドライン引数が存在しない場合、デフォルトの値が生成されます。

于 2015-07-06T10:11:40.897 に答える
-10

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()
于 2016-12-01T21:15:20.667 に答える