2011-09-30 10 views
12

Tengo un sitio django donde necesito llamar a un script usando un subproceso. La llamada subproceso funciona cuando estoy usando caracteres ASCII, pero cuando trato de emitir argumentos que se codificación UTF-8, me sale un error:python subprocess y unicode execv() arg 2 debe contener solo cadenas

execv() arg 2 must contain only strings. 

La cadena u'Wiadomo\u015b\u0107' proviene de una base de datos PostgreSQL. Este ejemplo usa palabras polacas. Cuando lo ejecuto usando palabras en inglés, no tengo problemas.

La llamada es así:

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']) 

No estoy seguro de cómo manejar los hilos en este caso. Lo extraño es que esto funciona bien cuando lo ejecuto a través del intérprete de Python.

Respuesta

17

Debe codificar las cadenas Unicode en la codificación que su programa espera. Si conoce el programa espera UTF-8:

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

Si usted no sabe qué codificación que necesita, usted podría tratar de codificación por defecto de su plataforma:

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

gracias que hizo el truco ... Pensé que ya estaba codificado ... lección aprendida. – deecodameeko

Cuestiones relacionadas