Buscando shell interactivo en un script de Python

Necesito determinar si el shell que invocó mi script de Python estaba en modo interactivo o no. Si estaba en modo interactivo, el progtwig 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()): ... 

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.

 if sys.flags.interactive: #interactive else: #not interactive 

http://docs.python.org/library/sys.html#sys.flags

Si ya tiene una dependencia de matplotlib, o si no le importa introducir uno, siempre puede llamar a matplotlib.is_interactive ()

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)