2011-12-20 16 views
5

私はbashで次のコマンドを使用してPythonスクリプトを実行します。引数が複数引用符で囲まれたPythonサブプロセス呼び出し

python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'" 

私はこの1つを包むためにPythonスクリプトを書いています。私は現在、os.system(私が知っている、それは駄目だ)を使用する必要があります。私はサブプロセスで動作するように引用符を取得する方法を見つけることができません.Popen。内部の一重引用符は、渡される文字列変数で維持する必要があります。

サブプロセスに渡された最初の変数の書式設定方法を教えてもらえますか?あなたも引用されたパラメータでsubprocess.Popenを使用してスクリプトを起動することができるはず

答えて

4

subprocess.Popen([ 
    "/usr/bin/python", 
    "myfile.py", 
    "-c", 
    "'USA'", 
    "-g", 
    "'CA'", 
    "-0", 
    "'2011-10-13'", 
    "-1", 
    "'2011-10-27'", 
]) 
0

はこれを試したことがありますか?

import subprocess 
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate() 

あなたは(私の場合には、それが一致して)何をbashから取得すると、あなたがsubprocess.Popenから得るものと同じであることを確認するためにmyfile.pyでこれを使用することもできます

import sys 
print sys.argv 
8

あなたは必要ありません。値をエスケープする。プロセスにはすべてが文字列として渡されます。

あなたは変数を渡すための最良の方法であるかを把握するためのshlexモジュールを使用することができます。

import shlex 
shlex.split('python myfile.py -c "USA" -g "CA" -0 "2011-10-13" -1 "2011-10-27"') 
['python', 
'myfile.py', 
'-c', 
'USA', 
'-g', 
'CA', 
'-0', 
'2011-10-13', 
'-1', 
'2011-10-27'] 
+0

これは、好ましいOneWayToDoIt(TM)です。 –

+0

shlexはUnixシェル用であるため、これはWindows環境では機能しません。 –

関連する問題