Pregunta

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

He mirado en decir si está en modo de pitón -i y probado el código de allí, sin embargo, que la función sólo devuelve cierto si Python ha sido invocada con la bandera -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()
¿Fue útil?

Solución

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

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

Esto también va a ejecutar código a través de python -c, pero no python -m.

Otros consejos

sys.ps1 y sys.ps2 sólo se definen en modo interactivo.

TFM : Si no se da la opción de interfaz, -i está implícito, sys .argv [0] es una cadena vacía ( "") y el directorio actual se añade al comienzo de sys.path.

Si el usuario invoca el intérprete con python y sin argumentos, como usted ha mencionado, se podría probar esto con if sys.argv[0] == ''. Esto también devuelve verdadero si se comienza con python -i, pero de acuerdo con los documentos, están funcionalmente la misma.

sys.flags :

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

A continuación se trabaja con y sin la opción -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'

Esto es algo que funcionara. Poner el siguiente fragmento de código en un archivo, y asignar la ruta de acceso a ese archivo a la variable de entorno PYTHONSTARTUP.

__pythonIsInteractive__ = None

Y a continuación, puede utilizar

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

http://docs.python.org/tutorial/ # interpreter.html el interactiva-startup-archivo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top