Mr *_*ooz 7 python interactive ipython
有没有办法让python脚本自动检测它是否以交互方式运行?或者,可以检测是否正在使用ipython而不是常规c python可执行文件?
背景:我的python脚本通常会调用exit().我不时地以交互方式运行脚本以进行调试和分析,通常是在ipython中.当我以交互方式运行时,我想要禁止退出的调用.
澄清:
假设我有一个脚本myscript.py,它看起来像:
#!/usr/bin/python
...do useful stuff...
exit(exit_status)
Run Code Online (Sandbox Code Playgroud)
有时,我想在我已经开始的IPython会话中运行脚本,说:
In [nnn]: %run -p -D myscript.pstats myscript.py
Run Code Online (Sandbox Code Playgroud)
在脚本结束时,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)
Run Code Online (Sandbox Code Playgroud)
Mr *_*ooz 13
我绊倒了下面的内容,它似乎为我做了诀窍:
def in_ipython():
try:
return __IPYTHON__
except NameError:
return False
Run Code Online (Sandbox Code Playgroud)
我比较了我找到的所有方法并制作了结果表。最好的似乎是这样的:
hasattr(sys, 'ps1')
Run Code Online (Sandbox Code Playgroud)
如果有人有其他可能不同的场景,请评论,我会添加它