python子进程和unicode execv()arg 2只能包含字符串

python子进程和unicode execv()arg 2只能包含字符串,python,unicode,subprocess,Python,Unicode,Subprocess,我有一个django站点,需要在其中使用子流程调用脚本。当我使用ascii字符时,子进程调用会起作用,但当我尝试发出utf-8编码的参数时,会出现错误: execv() arg 2 must contain only strings. 字符串u'Wiadomo\u015b\u0107'来自postgres db。这个例子使用的是波兰语单词。当我使用英语单词运行它时,我没有任何问题 该呼叫如下所示: subprocess.Popen(['/usr/lib/p3web2/src/post_n_ca

我有一个django站点,需要在其中使用子流程调用脚本。当我使用ascii字符时,子进程调用会起作用,但当我尝试发出utf-8编码的参数时,会出现错误:

execv() arg 2 must contain only strings.
字符串
u'Wiadomo\u015b\u0107'
来自postgres db。这个例子使用的是波兰语单词。当我使用英语单词运行它时,我没有任何问题

该呼叫如下所示:

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解释器运行它时,它工作得很好。

您应该在程序期望的编码中对Unicode字符串进行编码。如果您知道该计划需要UTF-8:

u'Wiadomo\u015b\u0107'.encode('utf8')
如果您不知道需要什么编码,可以尝试平台的默认编码:

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

谢谢你,我想它已经被编码了…吸取了教训。