2011-09-30 83 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