2010-05-23 5 views
6

여러 사용자가 대화 형 IDLE 유형 세션을 사용하여 동시에 작업 할 수있게 해주는 기존 웹 앱이 있습니까? 같은Python : 동일한 백엔드를 사용하는 동안 네트워크 IDLE/Redo IDLE 프런트 엔드?

뭔가 :하지 않으면

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 

(마지막 기능은 추가 기능이 더있을 것이지만.)

내 문제 다른 방법을 공식화하기 위해 : 나는 새 프런트를 만들 싶습니다 IDLE의 끝. 어떻게해야합니까?

업데이트 : 아니면 IDLE을 (를) 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 : 또한 다른 모든 작업을한다고 가정하면 구문 강조 표시를 원합니다. 이상적으로는 코드를 구문 분석하고 적절하게 스타일을 지정할 API 또는 서비스를 사용할 수 있습니다.

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

이것은 0MQ 백엔드를 사용하는 IPython의 향후 구현에 따라 가능할 수 있습니다.

+0

좀 더 자세히 설명해 주실 수 있습니까? 0MQ가 무엇인가요? –

+0

0mq는 ipython이 백엔드와 프론트 엔드를 분리하여 최근에 포트를 시작한 고속 메시징 큐입니다.이 특정 사용에 대해 들어 본 적이 없지만 잠재적으로 다중 사용자 세션을 허용합니다. 메일 링리스트에서 이것이 설계 목표인지 아닌지 질문 할 수 있습니다. http://mail.scipy.org/mailman/listinfo/ipython-dev – Autoplectic

0

개념 증명으로 소켓과 명령 줄 세션을 사용하여 무엇인가를 함께 배치 할 수 있습니다.

+0

이 명령 행 세션은 어떻게 생겼습니까? –

+0

한 번에 하나의 코드 행에 기여하는 여러 사람이있는 경우에만 일반 대화 형 세션처럼 보일 수 있습니다. – exupero

1

Nevow에 꽤 빨리 구현할 수 있습니다. 분명히 이런 일을하는 것은 HTTP를 통해 누군가에게 파이썬 콘솔에 대한 액세스를 허용하기 때문에 액세스가 꽤 제한 될 필요가 있습니다.

내가 할 줄은 모든 사용자가 로그인하는 것이 일반적이다 code.InteractiveInterpreter의 사용자 정의 서브 클래스의 인스턴스를 사용하는 콘솔에 대한 아테나 위젯을 만드는 것입니다

UPDATE :. 좋아, 그래서 GAE에서 뭔가 채팅처럼. 이와 같이 보이는 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

당신이 인터페이스의 측면에서 찾고있는 I가 알고있는 가장 가까운 파이썬 인터프리터는 DreamPie입니다. 그것은 채팅 인터페이스와 매우 흡사 한 입출력 영역을 가지고 있습니다. 또한 DreamPie는 하위 프로세스의 모든 코드를 실행합니다. DreamPie는 IDLE과 마찬가지로 완료 및 구문 색상 지정을 수행합니다. 즉, 입출력을 하위 프로세스로 /에서 파이프하는 것이 아니라 찾고있는 추상화를 구현했습니다.

웹 응용 프로그램이 아닌 데스크톱 응용 프로그램을 개발하려면 DreamPie에서 작업하고 여러 프론트 엔드 기능을 추가하는 것이 좋습니다.

업데이트 : 구문 강조 (HTML 포함)에 대해서는 Pygments 프로젝트를 참조하십시오. 그러나 그것은 완전히 다른 질문입니다. 한 번에 한 가지 질문을하십시오.

+0

DreamPie는 멋지게 보입니다 ... 프런트 엔드로 사용하고 온라인으로 연결하면 잘 작동 할 수 있습니다. –

-1

ipythonscreen을 사용합니다. 이 방법을 사용하면 공유 로그인을 만들어야하지만 둘 다 공유 스크린 세션에 연결할 수 있습니다. 한 가지 단점은 두 사용자가 같은 사용자로 등장한다는 것입니다.

관련 문제