告诉python是否处于-i模式

ʞɔı*_*ɔıu 5 python

你怎么知道python是否已经用-i标志启动了?

根据文档,您可以检查os.environ中的PYTHONINSPECT变量,该变量相当于 -i.但显然它不会以同样的方式工作.

作品:

$ PYTHONINSPECT=1 python -c 'import os; print os.environ["PYTHONINSPECT"]'
Run Code Online (Sandbox Code Playgroud)

不起作用:

$ python -i -c 'import os; print os.environ["PYTHONINSPECT"]'
Run Code Online (Sandbox Code Playgroud)

我问的原因是因为我有一个脚本,如果某些条件失败,则调用sys.exit(-1).这很好,但有时我想使用-i手动调试它.我想我可以学习使用"PYTHONINSPECT = 1 python"而不是"python -i",但如果有一种通用的方法可以做到这一点会很好.

jfs*_*jfs 3

如何以编程方式设置检查模式

@Jweede 提供的链接 的答案不准确。它应该是:

import os
os.environ['PYTHONINSPECT'] = '1'
Run Code Online (Sandbox Code Playgroud)

如何检索是否设置了交互/检查标志

只是@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
Run Code Online (Sandbox Code Playgroud)

请参阅 Python 的main.c