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

12 投票
1 回答
9116 浏览
提问于 2025-04-17 03:26

我有一个用Django做的网站,我需要用一个叫做subprocess的工具来调用一个脚本。当我使用ASCII字符时,这个subprocess调用可以正常工作,但当我尝试传递UTF-8编码的参数时,就出现了错误:

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解释器运行时,这个问题就不存在了。

1 个回答

17

你应该把Unicode字符串转换成你的程序所需要的编码。如果你知道程序需要的是UTF-8编码:

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

如果你不确定需要什么编码,可以试试你所在平台的默认编码:

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

撰写回答