54171


例えば

[code]

    some_command -p aaaa -bbbb
    
[/code]

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

[code]

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

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

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


CC BY-SA 4.0
2019-04-15T05:00:11.747
54168
2019-04-15T06:07:15.993
7232
question
python
Pythonのsubprocessで引数の値がオプションとして実行されてしまう。


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

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

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

[code]

    some_command -p aaaa -- -bbbb
    
[/code]

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


CC BY-SA 4.0
2019-04-15T06:07:15.993
54171
2019-04-15T06:07:15.993
19110
54168
answer