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

在ipython中检测python脚本何时以交互方式运行,python,interactive,ipython,Python,Interactive,Ipython,python脚本是否有办法自动检测是否以交互方式运行?或者,是否可以检测ipython是否正在使用,而不是常规的c-python可执行文件 背景:我的python脚本中通常有一个exit()调用。有时,我会以交互方式运行脚本进行调试和分析,通常使用ipython。当我以交互方式运行时,我希望抑制要退出的调用 澄清: 假设我有一个脚本myscript.py,它看起来像: #!/usr/bin/python ...do useful stuff... exit(exit_status) #!/us

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

背景:我的python脚本中通常有一个exit()调用。有时,我会以交互方式运行脚本进行调试和分析,通常使用ipython。当我以交互方式运行时,我希望抑制要退出的调用

澄清

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

#!/usr/bin/python
...do useful stuff...
exit(exit_status)
#!/usr/bin/python
...do useful stuff...
if is_python_running_interactively():
    print "The exit_status was %d" % (exit_status,)
else:
    exit(exit_status)
有时,我想在已经启动的IPython会话中运行脚本,比如:

In [nnn]: %run -p -D myscript.pstats myscript.py
在脚本结束时,exit()调用将导致ipython挂起,同时它会询问我是否真的要退出。这是调试时的一个小麻烦(对我来说太小了,我不在乎),但它会弄乱分析结果:退出提示会包含在分析结果中(如果我在午餐前启动分析会话,则分析会更加困难)

我想要的是允许我修改脚本,使其看起来像:

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

当以交互方式调用时,python将在$PYTHONSTARTUP中运行脚本,因此您可以简单地让该环境变量调用一个脚本,该脚本将设置一个全局

我无意中发现了以下内容,它似乎为我实现了这一点:

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

文档说,
sys.ps1
在非交互模式下不存在。此外,可以使用
sys.flags
(对于Python2.6+)来检测我们是否使用了
python-i

此脚本检测我们是否以交互方式、非交互方式和事后模式运行(如果使用
python-i
隐式调用python解释器,并且用户认为他进入了“交互”控制台,则这可能归因于交互模式):


可以按照Fooz先生的描述添加IPython支持。

我比较了我找到的所有方法,并制作了一个结果表。最好的是:

hasattr(系统'ps1')


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

您使用
python
获得的标准交互式shell如何?我的测试是在Windows 10上进行的,“shell”同时指cmd和Git Bash(结果相同)