は、あなたが探しているものを正確に取得するには、トリックはparse_known_args()
の代わりparse_args()
を使用することです:
#!/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action="store_true")
parser.add_argument('-b', action="store_true")
opts = parser.parse_known_args()
# Print info about flags
if opts[0].a: print('You set the option "-a"')
if opts[0].b: print('You set the option "-b"')
# Collect remainder (opts[1] is a list (possibly empty) of all remaining args)
if opts[1]: print('You passed the strings %s' % opts[1])
EDIT:
./clargs.py -h
usage: clargs_old.py [-h] [-a] [-b]
optional arguments:
-h, --help show this help message and exit
-a
-b
:
上記のコードは、次のヘルプ情報を表示します
オプションの任意の引数についてユーザーに通知する場合は、私が考えることができる唯一の解決策はArgumentParserをサブクラス化することですあなた自身でそれを書いてください。例えば
次のヘルプ情報を表示する
#!/bin/env python
import os
import argparse
class MyParser(argparse.ArgumentParser):
def format_help(self):
help = super(MyParser, self).format_help()
helplines = help.splitlines()
helplines[0] += ' [FOO]'
helplines.append(' FOO some description of FOO')
helplines.append('') # Just a trick to force a linesep at the end
return os.linesep.join(helplines)
parser = MyParser()
parser.add_argument('-a', action="store_true")
parser.add_argument('-b', action="store_true")
opts = parser.parse_known_args()
# Print info about flags
if opts[0].a: print('You set the option "-a"')
if opts[0].b: print('You set the option "-b"')
# Collect remainder
if opts[1]: print('You passed the strings %s' % opts[1])
:
./clargs.py -h
usage: clargs.py [-h] [-a] [-b] [FOO]
optional arguments:
-h, --help show this help message and exit
-a
-b
FOO some description of FOO
オプションの引数」の下に「利用」のラインとヘルプのFOO
で[FOO]
の追加を注意してください"
argparseチュートリアルを終了しましたか?あなたが記述しているものはすべてそこにあります – SheetJS
議論されていない唯一の部分は 'nargs =" * "'の振る舞いです(1つの位置引数が残りの引数をすべて取得できるようになります) – SheetJS
@Nirk、難しいのは、 'parse_args'は、「位置」引数を見るとすぐに、他の引数の検索をやめ、その位置引数から最後まで引き数を集めます。ほとんどの場合、これは問題ありませんが、彼の1番目と3番目の例が壊れてしまいます。 – jedwards