是否有一个Python脚本的方式来自动检测是否正在交互还是不跑? 可替代地,人们可以检测IPython中是否正在使用相对于常规的C蟒可执行?
背景:我的Python脚本通常有一个呼叫退出()在其中。 不时,我运行脚本交互的调试和分析,通常在IPython中。 当我以交互方式运行,我想取消退出呼叫。
澄清 :
假设我有一个剧本,myscript.py,看起来像:
#!/usr/bin/python
...do useful stuff...
exit(exit_status)
有时候,我想运行,我已经开始了IPython的会话中的脚本,说是这样的:
In [nnn]: %run -p -D myscript.pstats myscript.py
在脚本的末尾,出口()调用将导致IPython的挂起,同时它问我,如果我真的要退出。 这是一个小麻烦,而调试(太轻微了我关心),但它可以弄乱分析结果:出口迅速被包括在配置文件中的结果(使分析难度,如果我开始之前去上午餐分析会话) 。
我想是的东西,让我修改我的脚本,所以它看起来像:
#!/usr/bin/python
...do useful stuff...
if is_python_running_interactively():
print "The exit_status was %d" % (exit_status,)
else:
exit(exit_status)
我stumbed的追随者,似乎这样的伎俩对我来说:
def in_ipython():
try:
__IPYTHON__
except NameError:
return False
else:
return True
文件说, sys.ps1
不会在非交互模式存在。 此外,可以使用sys.flags
(对于Python 2.6+),以检测是否我们已经使用python -i <whatever>
。
该脚本检测,如果我们以交互方式运行,非交互,并在验尸模式(这可能是由于交互模式,如果Python解释器将使用称为python -i
含蓄和用户认为他登陆到“互动”控制台):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
# IPython recognition is missing; test here if __IPYTHON__ exists, etc.
if hasattr(sys, 'ps1'):
print("Running interactively.")
else:
print("Not running interactively...")
if sys.flags.interactive:
print("... but I'm in interactive postmortem mode.")
可以通过福兹先生描述添加IPython的支持。
当调用交互,蟒蛇将运行$ PYTHONSTARTUP脚本,所以你可以简单地有一个环境变量调用脚本设置全局