告诉python是否处于-i模式

告诉python是否处于-i模式,python,Python,如何判断python是否以-i标志启动 根据,您可以在os.environ中检查PYTHONINSPECT变量,它相当于-i。但很明显,它的工作方式不同 作品: $ PYTHONINSPECT=1 python -c 'import os; print os.environ["PYTHONINSPECT"]' 不起作用: $ python -i -c 'import os; print os.environ["PYTHONINSPECT"]' 我问这个问题的原因是,如果某些条件失败,我有一个

如何判断python是否以-i标志启动

根据,您可以在os.environ中检查PYTHONINSPECT变量,它相当于-i。但很明显,它的工作方式不同

作品:

$ PYTHONINSPECT=1 python -c 'import os; print os.environ["PYTHONINSPECT"]'
不起作用:

$ python -i -c 'import os; print os.environ["PYTHONINSPECT"]'
我问这个问题的原因是,如果某些条件失败,我有一个脚本可以调用sys.exit(-1)。这很好,但有时我想使用-I手动调试它。我想我可以学习使用“PYTHONINSPECT=1 python”而不是“python-I”,但如果有一种通用的方法来实现这一点,那就太好了。

这说明了如何以编程方式设置检查模式。

他的回答不准确。应该是:

import os
os.environ['PYTHONINSPECT'] = '1'
如何检索是否设置了交互/检查标志 只是另一种变体:


请参阅Python。

我查看了源代码,尽管提供-I时的变量集存储在Py_InteractiveFlag中,但它看起来并没有暴露给Python

但是,如果您不介意通过一些低级ctypes检查来弄脏您的手,我认为您可以通过以下方式获得该值:

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))

[编辑]修复打字错误,并检查PYTHONINSPECT(未设置变量),如注释中所述

我想知道它是否已经处于交互模式,而不是设置它。很抱歉,你问题的最后一部分让我无法回答。:-)
InteractiveFlag
忽略PYTHONINSPECT环境变量。谢谢,我已经修复了输入错误,并添加了对环境变量的检查。值得一提的是Py_InspectFlag(Python 2.6+)。如果存在“-i”或PYTHONINSPECT设置为非空,则该值大于0。添加到源代码的链接很有趣-我正在查看2.5源代码,它缺少此标志,但它看起来更适合于更高版本。但是,它确实忽略了python代码在python启动后设置PYTHONINSPECT的情况,因此可能仍然需要进行环境检查。
os.environ
检查绝对是必需的。有
Py\u InspectFlag=0main.c中的行
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))