检测何时在ipython中以交互方式运行python脚本


问题内容

python脚本是否可以自动检测它是否正在以交互方式运行?或者,可以检测是否使用ipython而不是常规c python可执行文件吗?

背景:我的python脚本通常在其中调用exit()。有时,我通常以ipython交互式地运行脚本以进行调试和配置。当我以交互方式运行时,我想禁止调用退出。

澄清

假设我有一个脚本myscript.py,看起来像:

#!/usr/bin/python
...do useful stuff...
exit(exit_status)

有时,我想在已经开始的IPython会话中运行脚本,说的是:

In [nnn]: %run -p -D myscript.pstats myscript.py

在脚本末尾,exit()调用将导致ipython挂起,同时询问我是否真的要退出。这是调试时的一个小麻烦(对于我来说太小了,我不太在乎),但是它可能使分析结果混乱:退出提示会包含在配置文件结果中(如果我在午餐之前开始分析会话,则使分析更加困难)

我想要的是允许我修改脚本的内容,如下所示:

#!/usr/bin/python
...do useful stuff...
if is_python_running_interactively():
    print "The exit_status was %d" % (exit_status,)
else:
    exit(exit_status)

问题答案:

我偶然发现以下内容,这似乎对我有用:

def in_ipython():
    try:
        return __IPYTHON__
    except NameError:
        return False