6

argparse を使用して任意の文字列をオプションの引数として定義するにはどうすればよいですか?

例:

[user@host]$ ./script.py FOOBAR -a -b
Running "script.py"...
You set the option "-a"
You set the option "-b"
You passed the string "FOOBAR"

理想的には、引数の位置が問題にならないようにしたいと思います。すなわち:

./script.py -a FOOBAR -b== ./script.py -a -b FOOBAR==./script.py FOOBAR -a -b


BASH では、を使用しながらこれを実現できgetoptsます。case ループで必要なすべてのスイッチを処理した後、 を読み取る行がshift $((OPTIND-1))あり、そこから標準$1の 、$2$3などを使用して残りのすべての引数にアクセスできます...
argparse にそのようなものはありますか?

4

1 に答える 1

6

探しているものを正確に取得するには、次の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])

編集:

上記のコードは、次のヘルプ情報を表示します。

./clargs.py -h

使用法: clargs_old.py [-h] [-a] [-b]

オプションの引数:
  -h, --help このヘルプ メッセージを表示して終了します
  -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

使用法: clargs.py [-h] [-a] [-b] [FOO]

オプションの引数:
  -h, --help このヘルプ メッセージを表示して終了します
  -a
  -b
  FOO FOOの説明

[FOO]「使用方法」の行とFOO「オプションの引数」の下のヘルプにが追加されていることに注意してください。

于 2013-06-18T01:24:49.037 に答える