27

次の構文が必要です。

python utility.py file1 FILE1 file2 FILE2

ここで、file1 と file2 はオプションの引数です。この構文で動作させるのは簡単です:

python utility.py --file1 FILE1 --file2 FILE2

使用して

parser.add_argument('--file1',type=file)
parser.add_argument('--file2',type=file)

ただし、ダッシュを削除すると、argparse はそれをオプションの引数ではなく位置引数として解釈し始めます...

言い換えれば、ダッシュなしでオプションのパラメータを持つことができるように、引数がオプションか位置指定かを argparse に具体的に伝えることは可能ですか?

4

3 に答える 3

12

あなたのためにこれを行う方法はありませargparseん。ただし、argparse任意の数の位置引数を受け入れるようにすることができます。

parser.add_argument('FILES',nargs='*')
options=parser.parse_args()
file1,optional_files=options.FILES[0],options.FILES[1:]

もちろん、少なくとも 1 つのファイルが指定されていることを確認するために、いくつかのチェックを追加することもできます。

編集

ここで何が必要かはまだ 100% わかりませんが、file1file2がリテラル文字列である場合は、 を前処理することで少し回避できますsys.argv。もちろん、これでもヘルプ メッセージの形式がおかしくなりますが、どちらの形式でも問題ないことを説明するエピローグをいつでも追加できます。

import argparse
import sys

mangle_args=('file1','file2')
arguments=['--'+arg if arg in mangle_args else arg for arg in sys.argv[1:]]

parser=argparse.ArgumentParser()
parser.add_argument('--file1')
parser.add_argument('--file2')
options=parser.parse_args(arguments)
于 2012-07-03T12:15:49.223 に答える