2011-09-30 78 views
12

我有一個django站點,我需要使用子進程調用腳本。子進程調用工作時,我使用的ASCII字符,但是當我嘗試發出是UTF-8編碼參數,我得到一個錯誤:python subprocess和unicode execv()arg 2只能包含字符串

execv() arg 2 must contain only strings. 

字符串u'Wiadomo\u015b\u0107'從一個Postgres數據庫的到來。這個例子使用波蘭語。當我用英文單詞運行它時,我沒有任何問題。

調用看起來是這樣的:

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']) 

我不知道如何處理字符串在這種情況下。奇怪的是,這個工作正常,當我通過python解釋器運行它。

回答

17

您應該按照程序所需的編碼方式對Unicode字符串進行編碼。如果你知道程序期望的UTF-8:

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

如果你不知道什麼是編碼,你需要,你可以試試你的平臺默認編碼:

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

感謝該訣竅...我以爲它已經被編碼了......經驗教訓。 – deecodameeko

相關問題