usar script español ejecutar desde consola como comandos archivos archivo python terminal piping

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