подпроцесс python и unicode execv () arg 2 должны содержать только строки - PullRequest
12 голосов
/ 30 сентября 2011

У меня есть сайт 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.

1 Ответ

17 голосов
/ 30 сентября 2011

Вы должны кодировать строки Unicode в той кодировке, которую ожидает ваша программа.Если вы знаете, что программа ожидает UTF-8:

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

Если вы не знаете, какая кодировка вам нужна, вы можете попробовать кодировку по умолчанию для вашей платформы:

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