tutorial online mac interpreters idle compiler python shell pipe interactive

online - python interpreters



Buscando shell interactivo en un script de Python (5)

Desde este enlace puede usar la misma forma y probar si stdin está asociado a una terminación (tty), puede hacerlo usando os.isatty() , ejemplo:

>>> os.isatty(0) True

NB: Desde el mismo enlace, esto fallará cuando invoque el comando de forma remota a través de ssh, la solución que se ofrece es probar si la entrada estándar está asociada a una tubería.

Necesito determinar si el shell que invocó mi script de Python estaba en modo interactivo o no. Si estaba en modo interactivo, el programa debería canalizar la salida a menos (1) para facilitar la lectura. Si no, simplemente debe imprimir su salida a la salida estándar, para permitir que se canalice a una impresora, archivo o un buscapersonas diferente.

En un script de shell, habría comprobado si se definió la variable de solicitud $ PS1, o si hubiera buscado la opción -i entre las marcas almacenadas en la variable $.

¿Cuál es el método preferido para probar la interactividad desde Python?


Esto a menudo funciona bastante bien.

import os, sys if os.isatty(sys.stdout.fileno()): ...


Hago una clase de tapa para la prueba.

Por ejemplo tienes:

class SuperInteractiveClass(object): def get_data_from_stdin(self): ''... a lot of code here ...'' ''... and a lot of other function''

Hago una segunda clase, solo para pruebas.

class TestSuperInteractiveClass(SuperInteractiveClass): prepared_data = [] def add_prepared_data(self,data): self.prepared_data.append(data) def get_data_from_stdin(self): return self.prepared_data.pop(0)