【问题标题】:python subprocess and unicode execv() arg 2 must contain only stringspython subprocess 和 unicode execv() arg 2 必须只包含字符串
【发布时间】:2011-09-30 15:31:34
【问题描述】:

我有一个 django 站点,我需要在其中使用子进程调用脚本。当我使用 ascii 字符时,子进程调用有效,但是当我尝试发出 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 解释器运行它时,它工作得很好。

【问题讨论】:

    标签: python unicode subprocess


    【解决方案1】:

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

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

    如果你不知道你需要什么编码,你可以试试你平台的默认编码:

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

    【讨论】:

    • 谢谢你成功了……我以为它已经被编码了……吸取了教训。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多