python interactive python-2.5 python-2.x

Indica si Python está en modo interactivo



interactive python-2.5 (6)

En una secuencia de comandos de Python, ¿hay alguna manera de saber si el intérprete está en modo interactivo? Esto sería útil para que, por ejemplo, cuando ejecute una sesión interactiva de Python e importe un módulo, se ejecute un código ligeramente diferente (por ejemplo, el registro está desactivado).

Observé si Python está en modo -i y probé el código allí. Sin embargo, esa función solo devuelve true si Python se ha invocado con el indicador -i y no cuando el comando utilizado para invocar el modo interactivo es python sin argumentos

Lo que quiero decir es algo como esto:

if __name__=="__main__": #do stuff elif __pythonIsInteractive__: #do other stuff else: exit()


Aquí hay algo que funcionaría. Coloque el siguiente fragmento de código en un archivo y asigne la ruta a ese archivo a la variable de entorno PYTHONSTARTUP .

__pythonIsInteractive__ = None

Y luego puedes usar

if __name__=="__main__": #do stuff elif ''__pythonIsInteractive__'' in globals(): #do other stuff else: exit()

http://docs.python.org/tutorial/interpreter.html#the-interactive-startup-file


Desde TFM : si no se proporciona una opción de interfaz, -i está implícito, sys.argv [0] es una cadena vacía ("") y el directorio actual se agregará al inicio de sys.path.

Si el usuario invocó al intérprete con python y sin argumentos, como mencionó, puede probar esto con if sys.argv[0] == '''' . Esto también devuelve true si se inicia con python -i , pero según los documentos, son funcionalmente iguales.


Lo siguiente funciona con y sin el interruptor -i:

#!/usr/bin/python import sys # Set the interpreter bool try: if sys.ps1: interpreter = True except AttributeError: interpreter = False if sys.flags.interactive: interpreter = True # Use the interpreter bool if interpreter: print ''We are in the Interpreter'' else: print ''We are running from the command line''


Utilice sys.flags :

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



__main__.__file__ no existe en el intérprete interactivo:

import __main__ as main print hasattr(main, ''__file__'')

Esto también se aplica al código ejecutado a través de python -c , pero no a python -m .