检测何时在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