5

Pythonreadfile.pyargparse.

プログラムは、位置引数 で指定されたファイルから読み取りますinput。追加の引数を指定しないと、このプログラムはあまり面白くありません。読み込んで終了するだけinputです。オプションの引数--output [OUTPUT_FILE]は、入力ファイルをファイルに書き込む必要があることを示します。OUTPUT_FILEもオプションです。指定されていない場合、入力は に書き込まれdefault.outます。

引数パーサーを次のように設定しました。

parser = argparse.ArgumentParser(description='Read from a file')
parser.add_argument(
    'input',
    help='file to read from')
parser.add_argument(
    '--output',
    nargs='?',
    const='default.out',
    default=None,
    help="""write file to %(metavar)s. If %(metavar)s isn't
         specified, write file to %(const)s.""",
    metavar='OUTPUT_FILE')
args = parser.parse_args()
return args.file, args.output_file

コマンドラインに表示されないdefault=None場合に、その不在を None で検出できるように使用することに注意してください。--ouput

これにより、次のような使用法の署名が得られます。

usage: readfile.py [-h] [--output [OUTPUT_FILE]] input

実行すると、これは引数を期待どおりに処理します

python readfile.py input.in --output somefile.out

また

python readfile.py --output somefile.out input

実行すると設定outputされますdefault.out

python readfile.py input.in --output

しかし、私が走れば

python readfile.py --output input.in

引数が少なすぎると不平を言っています。argparse は、このパターンを解釈するのに十分「賢い」と思い、inputtoinput.inおよびoutputtoに設定しましたdefault.out。生成された使用法は、これを示唆しています。

何か不足していますか?

4

2 に答える 2

5

いいえ、これは認識されません。最後の例では、明らかに に渡されinput.inてい--outputます。

defaultパラメータとパラメータを反転することをお勧めしconstます。デフォルトを default.out にしたいので、そうする必要がありますdefault='default.out'。空のパラメーターconstがある場合は、別の値に設定できます。--output

--outputそうすれば、デフォルトを変更したい場合を除き、パラメーターを追加する必要はありません。たとえば--output、出力したい場合は空のパラメーターを使用できます。stdout

于 2012-12-14T09:03:44.903 に答える
0

「--」を渡してオプションの終わりを示すことができます。例えば:

python readfile.py --output -- input

意図した効果があります。ただし、 --output への引数を必須にし、以下を許可します。

python readfile.py --output - input

おそらくよりきれいです。

于 2015-07-31T16:31:06.080 に答える