有没有办法python脚本来自动检测它是否正在运行的交互式地或者不是?或者,可以检测是否ipython正在使用与经常c蟒蛇可执行的?

背景:我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:
        __IPYTHON__
    except NameError:
        return False
    else:
        return True

其他提示

文件说 sys.ps1 不存在非交互式模式。此外,一个可以使用 sys.flags (python2.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支持可以加以描述的由先生Fooz.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top