21

Pythonのargparseを使用して、オプションの引数を追加します。指定されていない場合は、別の(必須の)引数の値を取得します。

parser.add_argument('filename',
                    metavar = 'FILE',
                    type    = str,
                    help    = 'input file'
                    )

parser.add_argument('--extra-file', '-f',
                    metavar = 'ANOTHER_FILE',
                    type    = str,
                    default = ,
                    help    = 'complementary file (default: FILE)'
                    )

Noneもちろん、引数が解析された後に手動でチェックすることもできますが、これを行うためのよりPython的な方法はありませんか?

4

2 に答える 2

18

私の知る限り、これを行う方法は次のとおりです。

ns = parser.parse_args()
ns.extra_file = ns.extra_file if ns.extra_file else ns.filename

(あなたがあなたの質問で提案するのと同じように)。

あなたおそらくこれに似たカスタムアクション体操をすることができますが、私はそれが価値がある(または「pythonic」)とは本当に思いません。

于 2012-08-17T14:34:04.717 に答える
2

これは、元のオプションセットとは少し異なるセマンティクスを持っていますが、うまくいく可能性があります。

parse.add_argument('filename', action='append', dest='filenames')
parse.add_argument('--extra-file', '-f', action='append', dest='filenames')
args = parse.parse_args()

これは、少なくとも1つのファイルargs.filenameのリストに置き換えられ、そのリストに引数が追加されます。コマンドラインでpositional引数の前に指定できるため、。の入力ファイルの特定の順序を指定することはできませんでした。args.filenames-f-fargs.filenames


-f別のオプションは、オプションを省略してfilename、複数値の位置引数を作成することです。

parse.add_argument('filenames', nargs='+')

ここでも、args.filenames少なくとも1つのファイル名のリストになります。これは、スクリプトに他の位置引数がある場合にも干渉します。

于 2012-08-17T14:53:29.250 に答える