5

一部の端末は^?バックスペースとして送信し、他の一部の端末はを送信します^H。ほとんどの端末は、動作を変更するように構成できます。考えられるすべての組み合わせを扱いたくはありませんが、Pythonからのバックスペースとして両方^?を受け入れたいと思います。^H

これを行う

os.system("stty erase '^?'")

私は最初のオプションを受け入れます

os.system("stty erase '^H'")

2つ目は受け入れますが、1つ目は使用できなくなります。使いたい

raw_input("userinput>>")

入力を取得します。

私が理解できた唯一の方法は、「rawベースの入力」ではなく「charベースの入力」で動作する独自のシェルを実装することです。

より良い(そしてより速い)アイデアはありますか?

4

3 に答える 3

5

組み込み関数raw_input()(またはPython 3)は、インポート後にライブラリinput()を自動的に使用します。readlineこれにより、優れたフル機能のラインエディタが提供されます。また、Readlineが伝染性ライセンス(GPL)を持っていることを気にしない限り、それが利用可能なプラットフォームではおそらく最善の策です。

于 2013-11-29T10:43:12.427 に答える
0

私はあなたの質問を正確に知りません。IMO、コンソールからプログラムに行ベースのテキスト(特殊文字を含む)を読み取るメソッドが必要です。

どの方法を使用する場合でも、この文字を別のコンソールで特別な意味を持つ場合は、コンソール(システム固有だけでなく、コンソール固有)の質問に直面する必要があります。コンソール内のすべてのテキストは、最初にバッファーに格納され、次に画面に表示され、最終的に処理されてプログラムに送信されます。この問題を回避する別の方法は、生の回線取得コンソール環境を使用することです。

raw_input()を装飾するための特別なメソッド(デコレータ)、または特別な単語を処理するための入力メソッドを追加できます。

その質問を解決した後

このスニペットを使用すると、入力を処理できます。

def pre():
    textline=raw_input()
    # ^? should replace to the specific value.
    textline.replace("^?","^H")
    return textline

より速くするために、多分OSに依存するいくつかのシステム関数を呼び出すことは考えです。しかし実際には、PythonのIOは一般的なジョブには十分高速です。

于 2012-05-05T06:47:49.693 に答える
0

修正するには^?消去時に行うstty erase ^H

于 2019-01-27T05:02:32.600 に答える