python subprocess和unicode execv()arg 2必须只包含字符串

dee*_*eko 12 python unicode subprocess

我有一个django站点,我需要使用子进程调用脚本.当我使用ascii字符时,子进程调用工作但当我尝试发出utf-8编码的参数时,我收到一个错误:

execv() arg 2 must contain only strings.
Run Code Online (Sandbox Code Playgroud)

该字符串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'])
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不确定如何处理字符串.奇怪的是,当我通过python解释器运行它时,这工作正常.

Mar*_*ers 17

您应该按照程序期望的编码对Unicode字符串进行编码.如果您知道该程序需要UTF-8:

u'Wiadomo\u015b\u0107'.encode('utf8')
Run Code Online (Sandbox Code Playgroud)

如果您不知道所需的编码,可以尝试平台的默认编码:

u'Wiadomo\u015b\u0107'.encode()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你做了这个伎俩......我以为它已经编码了......上了一课. (3认同)