2012-01-31 12 views
5

argparseを使用して、それが分かっている引数を解析し、残りの部分を手つかずのままにします。たとえば、私は-oオプションを使用し、そのまま残りを残し引数をそのままargparseに残す

performance -o output other_script.py -a opt1 -b opt2 

を実行できるようにしたいです。

モジュールprofiler.pyはoptparseのと同じようなことを行いますが、私はargparse使用しているので、私はやっている:これもother_script.pyもあれば、何が起こるか動作しているようですが、

def parse_arguments(): 
    parser = new_argument_parser('show the performance of the given run script') 
    parser.add_argument('-o', '--output', default='profiled.prof') 

    return parser.parse_known_args() 

def main(): 
    progname = sys.argv[1] 
    ns, other_args = parse_arguments() 
    sys.argv[:] = other_args 

-oフラグがありますか?

この問題を解決する一般的な方法はありますか?

答えて

5

​​は、EOFまたは--まで引数の解析を停止します。あなたはargparseによって解析されたbeeingてなくて、引数を持っているしたい場合は、書くことができます::

python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE] 
+0

ああ、そのおかげで知りませんでした!マーカーがなければ、argparseが何が起こっているのかを理解することは実際には非常に難しいでしょう。簡単な問題ではありません。 –

+0

少なくとも、python3では 'parse_known_args()'メソッドを使う必要があることを明確にする必要があります。 6) – krishonadish

12

また、スクリプトとそのオプションをキャプチャするために、nargs=argparse.REMAINDERであなたのパーサーに位置引数を追加することができます。

# In script 'performance'... 
p = argparse.ArgumentParser() 
p.add_argument("-o") 
p.add_argument("command", nargs=argparse.REMAINDER) 
args = p.parse_args() 
print args 

上記最小限のスクリプトを実行中...

$ performance -o output other_script.py -a opt1 -b opt2 
Namespace(command=['performance', '-a', 'opt1', '-b', 'opt2'], o='output') 
+1

また 'parse_known_args'がこれを行うべきです。 –

+0

これは '--'でもそのまま残っているようです。完璧! – user1338062

関連する問題