script - ejecutar.py desde consola python
Salida de tubería de la secuencia de comandos python (2)
Cuando Python detecta que está imprimiendo en un terminal, sys.stdout.encoding
se establece en la codificación del terminal. Cuando print
un unicode
, el unicode
se codifica en str
con sys.stdout.encoding
.
Cuando Python no detecta que está imprimiendo en un terminal, sys.stdout.encoding
se establece en None
. Cuando print
un unicode
, se utiliza el códec ascii
(al menos en Python2). Esto dará como resultado un UnicodeError si el unicode
contiene puntos de código fuera de 0-127.
Una forma de solucionar esto es codificar explícitamente su unicode
antes de imprimir. Tal vez sea la forma correcta, pero puede ser laborioso si tienes muchas declaraciones impresas diseminadas.
Otra forma de solucionar esto es establecer la variable de entorno PYTHONIOENCODING en una codificación adecuada. Por ejemplo,
PYTHONIOENCODING=utf-8
Entonces, esta codificación se usará en lugar de ascii
cuando se imprima la salida a un archivo.
Consulte la página wiki de PrintFails para obtener más información.
Estoy ejecutando ./sample.py --url http://blah.com
sin error, aunque si ejecuto ./sample.py --url http://blah.com | wc -l
./sample.py --url http://blah.com | wc -l
o similar, recibo un error:
UnicodeEncodeError: ''ascii'' codec can''t encode character u''/u200f'' in position 0: ordinal not in range(128)
¿Cómo puedo hacer que una secuencia de comandos python sea compatible con mis comandos de terminal? Sigo viendo referencias a sys.stdin.isatty
aunque su caso de uso parece ser opuesto.
Tratar:
(./sample.py --url http://blah.com) | wc -l
Esto genera una subshell para ejecutar su secuencia de comandos python luego canaliza la salida de stdout
a wc