2011-09-30 20 views
12

Altprocess kullanarak bir komut dosyasını çağırmam gereken bir django sitem var. Ben ASCII karakterleri kullanarak olduğumda altişlem çağrı çalışır ama utf-8 kodlanmış argümanları sorunu çalıştığınızda bir hata alıyorum: u'Wiadomo\u015b\u0107' bir Postgres db geliyorpython altprocess ve unicode execv() arg 2 yalnızca dizeleri içermelidir

execv() arg 2 must contain only strings. 

dize. Bu örnek, Lehçe kelimeleri kullanıyor. İngilizce kelimeleri kullanarak çalıştırdığımda hiç sorunum yok.

çağrı şuna benzer:

subprocess.Popen(['/usr/lib/p3web2/src/post_n_campaigns.py', '-c', u'bm01', '-1', u'Twoja', '-2', u'Wiadomo\u015b\u0107', '-3', u'', '-4', u'', '-5', u'', '-6', u'', '-m', u'pl', '-p', 'yes']) 

Ben bu durumda dizeleri nasıl işleneceğini emin değilim. Tuhaf olan şey, python yorumlayıcısından geçtiğimde bunun iyi sonuç vermesi.

cevap

17

Unicode dizgilerini, programınızın beklediği kodlamada kodlamalısınız. İhtiyacınız kodlama neyi bilmiyorsanız

u'Wiadomo\u015b\u0107'.encode('utf8') 

, kendi platformun varsayılan kodlamayı deneyebilirsiniz: Program UTF-8 beklediğini biliyorsanız hile yaptı

u'Wiadomo\u015b\u0107'.encode() 
+3

sayesinde ... Daha önce kodlanmış olduğunu düşündüm ... ders aldım. – deecodameeko