6

複数のユーザーがインタラクティブな IDLE タイプのセッションで同時に作業できる既存の Web アプリはありますか?

何かのようなもの:

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 Python チャット アプリを既にセットアップしています。

  • 受信メッセージをデータストアに保存するだけでなく、次のようなこともできます。


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>

これを行うための優れた既存の Python ツールはありますか?

4

5 に答える 5

1

Nevow では、このようなものをかなり迅速に実装できます。明らかに、このようなことを行うには HTTP 経由で Python コンソールへのアクセスを誰かに許可する必要があるため、アクセスをかなり制限する必要があります。

私がしたいことは、ログインしているすべてのユーザーに共通するcode.InteractiveInterpreterのカスタム サブクラスのインスタンスを使用する、コンソール用の Athena ウィジェットを作成することです。

更新:さて、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
于 2010-05-28T20:23:23.030 に答える
1

インターフェイスに関して、私が知っている最も近い Python インタープリターは、あなたが探しているものに、DreamPieです。チャット インターフェイスのように、独立した入力エリアと出力エリアがあります。また、DreamPie はすべてのコードをサブプロセスで実行します。DreamPie は、IDLE と同様に、補完と構文の色付けも行います。つまり、サブプロセスとの間で入力と出力をパイプするだけでなく、探している抽象化を実装しています。

デスクトップ アプリケーション (Web アプリではない) を開発する場合は、DreamPie をベースにして、複数のフロントエンド機能を追加することをお勧めします。

更新: 構文の強調表示 (HTML を含む) については、Pygmentsプロジェクトを参照してください。しかし、それはまったく別の問題です。ここで一度に 1 つの質問をしてください。

于 2010-05-29T08:46:23.800 に答える
0

概念実証として、ソケットとコマンドラインセッションを使用して何かをまとめることができる場合があります。

于 2010-05-23T23:21:38.020 に答える
-1

ipythonscreenを使用します。この方法では、共有ログインを作成する必要がありますが、両方とも共有画面セッションに接続できます。1 つの欠点は、両方が同じユーザーとして表示されることです。

于 2010-06-01T12:20:02.597 に答える
-1

これは、0MQ バックエンドを使用する IPython の今後の実装で可能になる可能性があります。

于 2010-05-23T21:09:25.767 に答える