2

アカウント情報を編集する機能を含むアプリケーション (CLI) があります。これは、質問をして、回答に古い値を入力して編集できるようにすることで行われます。現在、私はこれを行うためにreadlineモジュールを使用しています。このモジュールを回避する同じことを別の方法で実行したいと思います ( Python が実行されるオペレーティング システムと 同様に、Windowsのすべての機能でアプリを実行できるようにしたい)。

私はもともと次のウェブサイトで次のコードを見つけました (関数に合うように少し変更しました) が、そのスレッドは 4 年前のものなので、ここで質問することにしました。http://bytes.com/topic/python/answers/471407-default-editable-string-raw_input

import readline
def editInput(question, old_value):
    readline.set_startup_hook(lambda: readline.insert_text(old_value))
    try:
        new_value = raw_input(question)
    finally:
        readline.set_startup_hook(None)
    return new_value

editInput('What\'s the answer? ', '32')

更新: readline の代替 (PyReadline など) は必ずしも必要ではありません。同じ結果が必要です。質問を更新して、必ずしも Windows と GNU/Linux で実行する必要はなく、python でサポートされているすべての OS で実行する必要があることに言及しました。したがって、基本的には、非常に基本的な関数 (sys.stdin など) のみを使用してください。

4

2 に答える 2

1

行編集機能は、単純なものから重複するものまでありません。たとえば、「エコーせずに次のキーストロークを読み取る」などの機能 (カーソルの位置を変更し、画面上の外観と記憶されているテキスト行の内容を変更するために、そのキーストロークの意味を解釈し始める前であっても) msvcrtWindows でのcurses機能と Unix-y システムでの機能が必要であり、Python がサポートするすべてのOS で動作するという要求は非常に大きく、満たすことは不可能です。

回答を検討する前に、実行する必要があるオペレーティング システム/プラットフォームのセットと、絶対に提供する必要がある行編集機能のサブセットを非常に厳密に区切る必要があります。これらのセットを区切ることができない場合、答えは簡単です。求めているものは、過度に一般化されているため、単に不可能です。

于 2010-07-25T02:40:21.463 に答える
0

PyReadlineを使用しないのはなぜですか? 多かれ少なかれ同じ機能のために IPython によって使用され、十分にサポートされています。

実際、それをスクラッチします。私はそれを試してみましたが、うまくいきません。おそらく、pyreadline は をサポートしていませんset_startup_hook

于 2010-07-25T00:47:28.293 に答える