2017-06-12 4 views
0

複数の引数を持つexeを呼び出そうとしていますが、コマンドプロンプトやバッチコードでは動作しますが、Pythonでは動作しません。Pythonとバッチでargsを使ってexeを呼び出すのはどういう違いがありますか?

バッチ/ CMDコード

"FooBar.exe" -script "some file path" 

Pythonコードは、バッチコードが正常に動作しますが、引数が正しくソフトウェアに渡され取得されていない

from subprocess import call 
args = ['FooBar.exe','-script','"some file path"'] 
call(args) 

args = ['FooBar.exe -script "some file path"'] 
call(args) 

args = ['FooBar.exe', '-script "some file path"'] 
call(args) 

を試してみました(それは使用されません。引数)私はPythonコードを使用します。

引数が2つのmathodsの間で引き渡される方法には基本的な違いがありますか?場合

その関連私が使用している:

答えて

3

:引数の正しいトークン化を決定する際

shlex.split()は、特に複雑な場合に、有用であり得ます。

import shlex, subprocess 
command_line = input() 
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'" 
args = shlex.split(command_line) 
print(args) 
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"] 
p = subprocess.Popen(args) # Success! 

必要引数が引用またはバックスラッシュ場合脱出しながら、シェル内に空白で区切られている(例えば、 - 入力など)のオプションと(例えばeggs.txtなど)引数は、別々のリスト要素に行くことを特に注意シェルで使用されているファイル名(上記のスペースやエコーコマンドを含むファイル名など)は単一のリスト要素です。

それは次のようになります。

args = ['FooBar.exe', '-script', 'some file path'] 
+0

なんてこった!パスの周りに引用符は必要ではなく、すべての組み合わせを試しましたが、その1つは、今働いて、歓声。 – Notts90

関連する問題