2011-12-20 13 views
5

Bir Python komut dosyasını yürütmek için bash aşağıdaki komutu kullanıyorum.Birden çok alıntıya sahip argümanlarla Python alt işlem çağrısı

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

Bunu düzeltmek için bir Python komut dosyası yazıyorum. Ben şu anda os.system kullanmak zorundayım (biliyorum, bu berbat) altprocess.Popen ile çalışmak için tırnak almak nasıl anlayamıyorum. İç tek tırnaklar, iletilen dize değişkenlerinde tutulmalıdır.

Birisi, lütfen altprocess.Popen'a iletilen ilk değişkeni nasıl biçimlendireceğimi belirlemede yardımcı olabilir. Hatta alıntılanan parametreleri ile subprocess.Popen ile komut başlatmak gerekir

cevap

4

:

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

Bunu denediniz mi?

import subprocess 
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate() 
Sen ne bash aldığım (benim durumumda eşleştiği) Eğer subprocess.Popen ne olsun aynı olup olmadığını kontrol etmek myfile.py bu kullanabilirsiniz

:

import sys 
print sys.argv 
8

Sen gerekmez Değerlerden kaçmak. Sürecine her şey bir dize olarak geçirilir.

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

Bu tercih OneWayToDoIt (tm) 'dir:

Sen değişkenleri geçmesi için en iyi yoldur anlamaya shlex modülünü kullanabilirsiniz. –

+0

Not: Bu, Unix kabukları için bir anlam ifade edildiğinden, bu durum Windows ortamlarında çalışmaz. –

İlgili konular