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)
Si ya tiene una dependencia de matplotlib, o si no le importa introducir uno, siempre puede llamar a matplotlib.is_interactive()
if sys.flags.interactive:
#interactive
else:
#not interactive