3

argparseを使用して位置引数とオプション引数の両方を受け取るスクリプトを作成しています。DougのチュートリアルとPythonDocsを確認しましたが、答えが見つかりません。

parser = argparse.ArgumentParser(description='script to run')
parser.add_argument('inputFile', nargs='?', type=argparse.FileType('rt'),
parser.add_argument('inputString', action='store', nargs='?') 
parser.add_argument('-option1', metavar='percent', type=float, action='store')
parser.add_argument('-option2', metavar='outFile1', type=argparse.FileType('w'),
parser.add_argument('-option3', action='store', default='<10',
args = parser.parse_args()
# rest of script.... blah blah

ご覧のとおり、2つの位置引数と3つのオプションの引数が必要です。しかし、ターミナルで実行しようとすると、位置がチェックされません!python script.py inputfileを試してみると、正常に実行され、inputStringの値が見つからない場合、スクリプトの途中でエラーが出力されます。私が試してみると:python script.py xxx; 出力は次のとおりです。

usage script.py [-h] [-option1] [-option2] [-option3]

位置引数をチェックしない理由を誰かが説明できますか?

4

3 に答える 3

7

あなたの問題はあなたが指定しているということですnargs='?'ドキュメントから:

'?'。可能であれば、1つの引数がコマンドラインから消費され、単一のアイテムとして生成されます。コマンドライン引数が存在しない場合、デフォルトの値が生成されます。

省略したnargs='?'場合は引数が必要になり、引数が指定されargparseていない場合はエラーが表示されます。action='store'if (デフォルト)の場合、単一の引数が消費されます。

nargs=1;を指定することもできます。違いは、アイテム自体ではなく、1つのアイテムを含むリストが生成されることです。を使用できるその他の方法については、ドキュメントを参照してくださいnargs

于 2012-11-01T10:42:38.963 に答える
2

私のために働きます。

コード:

#!/usr/bin/python

import argparse

parser=argparse.ArgumentParser(description='script to run')

parser.add_argument('inputFile', nargs='?', type=argparse.FileType('rt'))
parser.add_argument('inputString', action='store', nargs='?') 
parser.add_argument('-option1', metavar='percent', type=float, action='store')
parser.add_argument('-option2', metavar='outFile1', type=argparse.FileType('w'))
parser.add_argument('-option3', action='store', default='<10')
args = parser.parse_args()

実行:

# ./blah.py -h
usage: blah.py [-h] [-option1 percent] [-option2 outFile1] [-option3 OPTION3]
               [inputFile] [inputString]

script to run

positional arguments:
  inputFile
  inputString

optional arguments:
  -h, --help         show this help message and exit
  -option1 percent
  -option2 outFile1
  -option3 OPTION3

引数リストの2行目を見落としましたか?

于 2012-11-01T10:25:47.697 に答える
1

期待どおりに動作します。inputStringとして実行する場合はありませんscript.py inputfile(1つの引数のみが指定されますinputStringが、2番目の引数です)。

narg='?'[]引数がオプションであることを意味します(ヘルプメッセージで囲まれています)。

于 2012-11-01T10:43:47.463 に答える