告诉python是否处于-i模式
如何判断python是否以-i标志启动 根据,您可以在os.environ中检查PYTHONINSPECT变量,它相当于-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"]' 我问这个问题的原因是,如果某些条件失败,我有一个
$ 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=0代码>main.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))