13

シンプルな read-eval-print-loop でいくつかのコマンドを受け入れることができる Python ベースのアプリがあります。入力を取得するために使用raw_input('> ')しています。Unix ベースのシステムでは、import readline動作を少し改善することも目的としています。これはすべて正常に機能しています。

問題は、非同期イベントが発生することです。イベントが発生したらすぐに出力を印刷したいと考えています。残念ながら、これは見栄えを悪くします。"> " 文字列は出力後に再び表示されず、ユーザーが何かを入力している途中である場合、テキストが半分に切り刻まれます。何かを印刷した後、おそらくユーザーの進行中のテキストを再描画する必要があります。

これは、解決された問題でなければならないようです。これを行う適切な方法は何ですか?

また、一部のユーザーは Windows ベースであることにも注意してください。

ティア

編集:受け入れられた回答はUnixyプラットフォーム(readlineモジュールが利用可能な場合)で機能しますが、Windowsでこれを機能させる方法を誰かが知っていれば、大歓迎です!

4

6 に答える 6

5

を使用して独自の REPL を作成するのはなぜraw_input()ですか? cmd.Cmd授業 は見ましたか?編集: sclappライブラリを見つけました。これも役立つかもしれません。

注:cmd.Cmdクラス (および sclapp) は、元の目標を直接サポートする場合とサポートしない場合があります。その機能を提供するために、必要に応じてサブクラス化し、変更する必要がある場合があります。

于 2009-01-13T21:44:41.030 に答える
2

これを実行します:

python -m twisted.conch.stdio

スレッドを使用せずに、色付きの非同期REPLを取得できます。プロンプトを入力している間、イベントループが実行されています。

于 2010-12-22T10:57:43.050 に答える
0

コードモジュールを調べると、Pythonコードを解釈するためのオブジェクトを作成することもできます(恥知らずなプラグ)https://github.com/iridium172/PyTermを使用すると、生のキーボード入力を処理するインタラクティブなコマンドラインプログラムを作成できます(^Cが発生するようにKeyboardInterrupt)。

于 2010-12-09T02:15:57.767 に答える
-1

2 つの基本的なオプションがあると思います。

  1. 出力を同期します(つまり、戻ってくるまでブロックします)
  2. 入力と (非同期) 出力を、おそらく 2 つの別々の列に分けます。
于 2009-01-13T15:36:14.830 に答える
-1

それは一種の答えではありませんが、IPythonのコードを見て、彼らがどのようにそれを行っているかを確認します。

于 2009-01-12T23:04:43.893 に答える