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

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)


Eso*_*ack 5

我比较了我找到的所有方法并制作了结果表。最好的似乎是这样的:

hasattr(sys, 'ps1')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果有人有其他可能不同的场景,请评论,我会添加它