2009-07-31 22 views
6

में एक पाइथन स्क्रिप्ट को अंतःक्रियात्मक रूप से चलाया जा रहा है क्या कोई पाइथन स्क्रिप्ट के लिए स्वचालित रूप से यह पता लगाने का कोई तरीका है कि यह अंतःक्रियात्मक रूप से चल रहा है या नहीं? वैकल्पिक रूप से, क्या कोई यह पता लगा सकता है कि नियमित सी पायथन निष्पादन योग्य बनाम आईपीथॉन का उपयोग किया जा रहा है या नहीं?यह पता लगाना कि 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

'पायथन' के साथ प्राप्त मानक इंटरैक्टिव खोल के बारे में क्या? – n611x007

2

जब सहभागी लागू, अजगर $ PYTHONSTARTUP में स्क्रिप्ट, चलाता है, जिससे आप बस उस वातावरण चर हो सकता है:

क्या मैं करना चाहते हैं कुछ है कि मुझे मेरी स्क्रिप्ट को संशोधित तो ऐसा लगता है कि अनुमति देता है एक स्क्रिप्ट है जो एक वैश्विक

3

डॉक्स किकहनाnoninteractive मोड में मौजूद नहीं है। इसके अतिरिक्त, python -i <whatever> का उपयोग करने के लिए कोई यह पता लगाने के लिए sys.flags (पायथन 2.6+ के लिए) का उपयोग कर सकता है।

इस स्क्रिप्ट का पता लगाता है कि अगर हम सहभागी चलाने, गैर सहभागी, और पोस्टमार्टम मोड (जो इंटरैक्टिव मोड के लिए जिम्मेदार ठहराया जा सकता है, तो अजगर दुभाषिया परोक्ष 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." 

श्री फूज़ द्वारा वर्णित आईपीथन समर्थन को जोड़ा जा सकता है।

+0

यह PyCharm कंसोल में गलत है। –

संबंधित मुद्दे