2010-05-23 6 views
6

क्या कोई मौजूदा वेब ऐप है जो एकाधिक उपयोगकर्ताओं को एक बार इंटरैक्टिव आईडीएलई प्रकार सत्र के साथ काम करने देता है?पायथन: समान बैक-एंड का उपयोग करते समय नेटवर्क किए गए आईडीईएल/फिर से आईडीईई फ्रंट-एंड?

कुछ की तरह:

IDLE 2.6.4 
Morgan: >>> letters = list("abcdefg") 
Morgan: >>> # now, how would you iterate over letters? 
Jack: >>> for char in letters: 
    print "char %s" % char 


char a 
char b 
char c 
char d 
char e 
char f 
char g 
Morgan: >>> # nice nice 

यदि नहीं, तो मैं एक बनाने के लिए करना चाहते हैं। क्या कोई मॉड्यूल है जिसका उपयोग मैं कर सकता हूं जो एक इंटरैक्टिव सत्र को अनुकरण करता है? मैं इस तरह एक अंतरफलक चाहते हैं:

def class InteractiveSession(): 
    ''' An interactive Python session ''' 

    def putLine(line): 
     ''' Evaluates line ''' 
     pass 

    def outputLines(): 
     ''' A list of all lines that have been output by the session ''' 
     pass 

    def currentVars(): 
     ''' A dictionary of currently defined variables and their values ''' 
     pass 

(हालांकि कि पिछले समारोह एक अतिरिक्त सुविधा के और अधिक हो जाएगा।)

मेरी समस्या एक और तरीका है तैयार करने के लिए: मैं एक नया मोर्चा बनाना चाहते हैं आईडीएलई के लिए अंत। मैं यह कैसे कर सकता हूँ?

अद्यतन: या शायद मैं eval() के माध्यम से आईडीईई अनुकरण कर सकता हूं?

अद्यतन 2: क्या होगा यदि मैं कुछ इस तरह किया:

  • मैं पहले से ही एक साधारण GAE अजगर चैट एप्लिकेशन की स्थापना की है, जिसकी सहायता से उपयोगकर्ता में साइन इन कमरों में चैट करते हैं, और साथ चैट कर सकते एक दूसरे।

  • के बजाय सिर्फ डेटासंग्रह को भेजे गए संदेशों की बचत, मैं कुछ इस तरह कर सकता है:


def putLine(line, user, chat_room): 
''' Evaluates line for the session used by chat_room ''' 

# get the interactive session for this chat room 
curr_vars = InteractiveSession.objects.where("chatRoom = %s" % chat_room).get() 

result = eval(prepared_line, curr_vars.state, {}) 

curr_vars.state = curr_globals 

curr_vars.lines.append((user, line)) 
if result: 
    curr_vars.lines.append(('SELF', result.__str__())) 

curr_vars.put() 

InteractiveSession मॉडल:

def class InteractiveSession(db.Model): 


# a dictionary mapping variables to values 
    # it looks like GAE doesn't actually have a dictionary field, so what would be best to use here? 
    state = db.DictionaryProperty() 

    # a transcript of the session 
    # 
    # a list of tuples of the form (user, line_entered) 
    # 
    # looks something like: 
    # 
    # [('Morgan', '# hello'), 
    # ('Jack', 'x = []'), 
    # ('Morgan', 'x.append(1)'), 
    # ('Jack', 'x'), 
    # ('SELF', '[1]')] 
    lines = db.ListProperty() 
इस काम कर सकता था

, या क्या मैं रास्ता बंद कर रहा हूं/यह दृष्टिकोण अक्षम है/मैं काम को डुप्लिकेट कर रहा हूं जब मुझे पहले से ही कुछ बनाया जाना चाहिए?

अद्यतन 3: इसके अलावा, मैं सब कुछ किसी और काम करके यह सोचते हैं, मैं वाक्य रचना हाइलाइटिंग चाहते हैं। आदर्श रूप से, मेरे पास कुछ एपीआई या सेवा होगी जिसका मैं उपयोग कर सकता हूं जो कोड को पार्स करेगा और इसे उचित तरीके से स्टाइल करेगा।

for c in "characters": 

बन जाएगा:

<span class="keyword">for</span> <span class="var">c</span> <span class="keyword">in</span> <span class="string>"characters"</span><span class="punctuation">:</span> 

वहाँ यह करने के लिए एक अच्छा मौजूदा अजगर उपकरण है?

+1

बहुत ही रोचक विचार है, हालांकि मुझे आश्चर्य होगा कि ऐसा कुछ पहले से मौजूद है। –

उत्तर

-1

यह 0 एमक्यू बैकएंड का उपयोग करके आईपीथन के आगामी प्रत्यारोपण के साथ संभव है।

+0

क्या आप थोड़ा और विस्तार कर सकते हैं? 0 एमक्यू क्या है? –

+0

0mq एक तेज़ मैसेजिंग कतार है जो आईपैथॉन ने हाल ही में बैकएंड से अलग-अलग फ्रंटेंड के लिए बंदरगाह करना शुरू कर दिया है, यह संभावित रूप से बहु-उपयोगकर्ता सत्रों की अनुमति देता है, हालांकि मैंने उस विशेष उपयोग को स्पष्ट रूप से नहीं सुना है। आप उनकी मेलिंग सूची पर पूछ सकते हैं यदि यह एक डिज़ाइन लक्ष्य है या नहीं: http://mail.scipy.org/mailman/listinfo/ipython-dev – Autoplectic

0

अवधारणा के सबूत के रूप में, आप सॉकेट और कमांड लाइन सत्र का उपयोग करके कुछ एकत्र करने में सक्षम हो सकते हैं।

+0

यह कमांड लाइन सत्र कैसा दिखता है? –

+0

यह एक नियमित इंटरैक्टिव सत्र की तरह दिख सकता है, केवल एक ही समय में कई लोगों ने कोड की लाइनों का योगदान दिया है। – exupero

1

मैं Nevow में इस तरह कुछ जल्दी से कार्यान्वित कर सकता हूं। जाहिर है, इस तरह कुछ करने के बाद से किसी भी चीज़ को पाइथन कंसोल तक पहुंचने की इजाजत देने के लिए एक्सेस को बहुत प्रतिबंधित होना आवश्यक है।

मुझे क्या होता कंसोल, कि code.InteractiveInterpreter के एक कस्टम उपवर्ग का एक उदाहरण है कि आम है करने के लिए सभी उपयोगकर्ताओं में लॉग इन के लिए इस्तेमाल किया के लिए एक एथेना विजेट बना है

अद्यतन:। ठीक है, तो आपके पास जीएई में कुछ चैट की तरह। यदि आप बस एक कोड में लाइनें जमा करते हैं। इस तरह दिखने वाले इंटरेक्टिव इंटरप्रेटर सबक्लास, यह आपके लिए काम करना चाहिए। ध्यान दें कि इंटरफेस बहुत InteractiveSession वर्ग आप का वर्णन करने के समान है:

class SharedConsole(code.InteractiveInterpreter): 
    def __init__(self): 
     self.users = [] 

    def write(self, data): 
     # broadcast output to connected clients here 
     for user in self.users: 
      user.addOutput(data) 

class ConnectedUser(object): 
    def __init__(self, sharedConsole): 
     self.sharedConsole = sharedConsole 
     sharedConsole.users.append(self) # reference look, should use weak refs 

    def addOutput(self, data): 
     pass # do GAE magic to send data to connected client 

    # this is a hook for submitted code lines; call it from GAE when a user submits code 
    def gotCommand(self, command): 
     needsMore = self.sharedConsole.runsource(command) 
     if needsMore: 
      pass # tell the client to change the command line to a textarea 
       # or otherwise add more lines of code to complete the statement 
1

निकटतम अजगर दुभाषिया मैं करने के लिए के बारे में पता है कि तुम क्या देख रहे हैं के लिए, इंटरफ़ेस के संदर्भ में, DreamPie है। इसमें एक अलग इंटरफ़ेस और आउटपुट क्षेत्र हैं, जो चैट इंटरफ़ेस की तरह हैं। इसके अलावा, ड्रीमपी एक सबप्रोसेस में सभी कोड चलाता है। ड्रीमपीई पूर्णता और सिंटैक्स रंग भी करता है, जो आईडीईई की तरह है, जिसका अर्थ यह है कि यह केवल उप-प्रोसेस से/पाइप इनपुट और आउटपुट नहीं करता है - इसने एब्स्ट्रैक्शन को कार्यान्वित किया है जिसे आप ढूंढ रहे हैं।

यदि आप डेस्कटॉप एप्लिकेशन (वेब-ऐप नहीं) विकसित करना चाहते हैं, तो मैं ड्रीमपी पर अपने काम को बेस करने और बस एकाधिक-फ्रंटेंड कार्यक्षमता जोड़ने की सलाह देता हूं।

अद्यतन: सिंटैक्स हाइलाइटिंग (HTML सहित) के लिए Pygments प्रोजेक्ट देखें। लेकिन यह एक बिल्कुल अलग सवाल है; कृपया एक समय में एक प्रश्न पूछें।

+0

ड्रीमपी अच्छा लग रहा है ... अगर मैं इसे फ्रंट एंड के रूप में उपयोग कर सकता हूं और इसे ऑनलाइन रख सकता हूं तो यह अच्छी तरह से काम कर सकता है। –

-1

मैं ipython और screen का उपयोग करूंगा। इस विधि के साथ, आपको एक साझा लॉगिन बनाना होगा, लेकिन आप दोनों साझा स्क्रीन सत्र से कनेक्ट हो सकते हैं। एक नकारात्मक पक्ष यह होगा कि आप दोनों एक ही उपयोगकर्ता के रूप में दिखाई देंगे।