2009-07-31 180 views
6

python腳本是否有辦法自動檢測它是否以交互方式運行?或者,可以檢測是否使用ipython而不是常規的c python可執行文件?檢測python腳本在ipython中以交互方式運行時

背景:我的Python腳本通常會在它們中調用exit()。我經常以交互方式運行腳本以進行調試和分析,通常使用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) 

回答

13

我以下stumbed,似乎這樣的伎倆對我來說:

def in_ipython(): 
    try: 
     __IPYTHON__ 
    except NameError: 
     return False 
    else: 
     return True 
+0

你用`python`獲得的標準交互式shell怎麼樣? – n611x007 2014-08-28 10:22:26

2

交互時調用,Python會運行$ PYTHONSTARTUP腳本,所以你可以簡單地有一個環境變量調用腳本設置全局

3

文檔說sys.ps1不以非交互模式存在。此外,可以使用sys.flags(用於python 2.6+)來檢測我們是否使用了python -i <whatever>

這個腳本檢測我們是否以交互方式,非交互​​方式和死後模式運行(如果隱式地使用python -i調用python解釋器,並且用戶認爲他已登陸到「交互」控制檯,則可能歸因於交互模式):

#!/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." 

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

+0

這在PyCharm控制檯中是錯誤的。 – 2017-06-10 19:24:27

相關問題