4

他のツールのコマンド ライン呼び出しを含むファイルを読み取る Python スクリプトがあります。ツールを呼び出す前に、この呼び出しのオプションを変更したいと思います。たとえば、次のように変換できます。

my_util --input file1.txt --option1 red --option2 blue

...これに:

my_util --input file1_001.txt --option1 red --option3 green

(より正確には、引数をリストとして処理します。)

これを行うには、モジュールを使用するのargparseが最も簡単な方法であると考えました。引数を解析し、必要に応じてオプションを変更、追加、または削除してから、コマンド ラインを再構築できます。

しかし、最後のステップはどうすればよいのでしょうか? Namespaceによって返されるオブジェクトが与えられた場合parse_args()、に渡すことができるコマンド ライン オプションのリストを簡単に再構築できますsubprocess.Popen()か?

4

2 に答える 2

2

Namespace オブジェクトは単なるオブジェクトのサブクラスなので、次のようにして値を dict として取得できますvars

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> args = parser.parse_args(['--foo', 'BAR'])
>>> vars(args)
{'foo': 'BAR'}

または、クラスに直接割り当てて、引数をクラス変数として取得できます。

>>> class C(object):
...     pass
...
>>> c = C()
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args(args=['--foo', 'BAR'], namespace=c)
>>> c.foo
'BAR'

これらの構造のいずれかを使用して、引数をテスト/置換し、結果を に渡すのはかなり簡単Popenです。

于 2013-02-12T00:38:07.383 に答える