2017-01-16 4 views
2

私はPythonプログラムを実行しようとしています。 1つの位置引数を使用します。位置引数が指定されていないときは、ヘルプを表示したい。しかし、私が得るすべてはここ位置指定引数が与えられていないときにヘルプを表示

error : too few arguments 

であるPythonのコードです:

parser = argparse.ArgumentParser(
     description = '''My Script ''') 
parser.add_argument('I', type=str, help='Provide the release log file') 
args = parser.parse_args() 

は位置引数が指定されていないとき、私は次の出力を期待している:

usage: script.py [-h] I 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 

任意の考えどのようにこれを達成していただければ幸いです。

答えて

1

​​このようには機能しません。 -h勢力の助けを求める必要があります。それ以外の場合は、エラーメッセージと共にusageが返されます。

0015:~/mypy$ python3 stack41671660.py 
usage: stack41671660.py [-h] I 
stack41671660.py: error: the following arguments are required: I 
0015:~/mypy$ python stack41671660.py 
usage: stack41671660.py [-h] I 
stack41671660.py: error: too few arguments 
0015:~/mypy$ python stack41671660.py -h 
usage: stack41671660.py [-h] I 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 

あなたはnargs='?'と 'オプションの' 位置引数を作成し、デフォルト値のためのテストを追加することができます。

print(args) 
if args.I is None: 
    parser.print_help() 

サンプルの実行:

0016:~/mypy$ python stack41671660.py 
Namespace(I=None) 
usage: stack41671660.py [-h] [I] 

My Script 

positional arguments: 
    I   Provide the release log file 

optional arguments: 
    -h, --help show this help message and exit 
0019:~/mypy$ python stack41671660.py 2323 
Namespace(I='2323') 

別のオプションをカスタマイズすることですparser.errorメソッドであるため、print_usageではなくprint_helpとなります。これは、この欠落した位置だけでなく、すべての解析エラーに影響します。

def error(self, message): 
    """error(message: string) 

    Prints a usage message incorporating the message to stderr and 
    exits. 

    If you override this in a subclass, it should not return -- it 
    should either exit or raise an exception. 
    """ 
    # self.print_usage(_sys.stderr) 
    self.print_help(_sys.stderr) 
    args = {'prog': self.prog, 'message': message} 
    self.exit(2, _('%(prog)s: error: %(message)s\n') % args) 

`

関連する問題