Aquí podría ser tu PUBLICIDAD


decir si python está en modo -i

votos
5

¿Cómo se puede saber si Python se ha iniciado con la bandera -i?

De acuerdo con los documentos , puede verificar la variable PYTHONINSPECT en os.environ, que es el equivalente de -i. Pero aparentemente no funciona de la misma manera.

Trabajos:

$ PYTHONINSPECT=1 python -c 'import os; print os.environ[PYTHONINSPECT]'

No funciona:

$ python -i -c 'import os; print os.environ[PYTHONINSPECT]'

La razón por la que pregunto es porque tengo un script que llama a sys.exit (-1) si ciertas condiciones fallan. Esto es bueno, pero a veces quiero depurarlo manualmente usando -i. Supongo que puedo aprender a usar PYTHONINSPECT = 1 python en lugar de python -i, pero sería bueno si hubiera una forma universal de hacerlo.

Publicado el 12/03/2009 a las 21:38
fuente por usuario ʞɔıu
En otros idiomas...        العربية       

3 respuestas

votos
3

Cómo establecer el modo de inspección mediante programación

La respuesta del enlace @Jweede proporcionado es imprecisa. Debería ser:

import os
os.environ['PYTHONINSPECT'] = '1'

Cómo recuperar si se establecen indicadores interactivos / inspeccionar

Simplemente otra variante de la respuesta de @ Brian :

import os
from ctypes import POINTER, c_int, cast, pythonapi

def in_interactive_inspect_mode():
    """Whether '-i' option is present or PYTHONINSPECT is not empty."""
    if os.environ.get('PYTHONINSPECT'): return True
    iflag_ptr = cast(pythonapi.Py_InteractiveFlag, POINTER(c_int))
    #NOTE: in Python 2.6+ ctypes.pythonapi.Py_InspectFlag > 0
    #      when PYTHONINSPECT set or '-i' is present 
    return iflag_ptr.contents.value != 0

Ver del pitón main.c .

Respondida el 12/03/2009 a las 09:53
fuente por usuario jfs


Aquí podría ser tu PUBLICIDAD


votos
2

Eché un vistazo a la fuente, y aunque la variable establecida cuando -i se proporciona se almacena en Py_InteractiveFlag, no parece que se exponga a python.

Sin embargo, si no te importa ensuciarte las manos con algunos tipos de bajo nivel de inspección, creo que puedes obtener el valor de la siguiente forma:

import ctypes, os

def interactive_inspect_mode():
    flagPtr = ctypes.cast(ctypes.pythonapi.Py_InteractiveFlag, 
                         ctypes.POINTER(ctypes.c_int))
    return flagPtr.contents.value > 0 or bool(os.environ.get("PYTHONINSPECT",False))

[Editar] corrige errores tipográficos y también comprueba PYTHONINSPECT (que no establece la variable), como se señala en los comentarios.

Respondida el 12/03/2009 a las 10:21
fuente por usuario Brian

Respondida el 12/03/2009 a las 09:44
fuente por usuario Jon W