Подтвердить что ты не робот

Подпроцесс python и unicode execv() arg 2 должны содержать только строки

У меня есть сайт django, где мне нужно вызвать script с помощью подпроцесса. Вызов подпроцесса работает, когда я использую символы 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.

4b9b3361

Ответ 1

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

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

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

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