Pythonのsubprocessで引数の値がオプションとして実行されてしまう。

投稿者: Anonymous

例えば

some_command -p aaaa -bbbb

この-bbbbはコマンドの引数ですが、subprocess.callで以下のようにして実行すると

subprocess.call(["some_command", "-p", "aaaa", "-bbbb"])

-bbbbの部分がオプションとして処理されてしまいます。

普通のシェルであれば"-bbbb"とすることで区別できますが、Pythonのsubprocessではどのようにすれば良いでしょうか。

解決

もしコマンドに対し "-bbbb" という引数を与えると正常動作するのであれば、その通りに ""-bbbb"" と書けば良さそうです。

しかし不思議なのは「シェル上で」-bbbb"-bbbb" に動作の違いが出ているとおっしゃっている点です。コマンドのオプション引数処理はコマンド側がやっており、シェル側ではありません。引数として与えられる -bbbb"-bbbb" はシェルから見たら同じ文字列であり、コマンド側には -bbbb が渡されているはずです。このため、どこかで勘違いがありそうな気がしています。

コマンド引数の慣例では、-- という引数を与えるとそれ以後がオプションではなくファイルパスとして認識されるようになる、というものがあります。今回の例だと

some_command -p aaaa -- -bbbb

のようにする形です。これもコマンド側がオプション引数の処理をどうしているかによって変わるので一概には言えないのですが、典型的にはこの方法がよく使われています。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *