1

PuTTY を使用して Linux マシンに接続しています。

Linux マシンで、文字のリストを取得し、各文字をそのインデックスと共に順番に出力する Python スクリプトを実行しています。

リスト内の一部の文字は、印刷可能な ASCII 文字の範囲外です。これらの不規則な文字により、出力が破損しています。単に表示されない場合もあれば、有効なテキストの大きなチャンクを実際に削除する場合もあります。

バッファリングをオフにすることでこれを修正できると思っていましたが、python -u フラグを使用してスクリプトを実行すると問題が発生します。

興味深いことに、入力を less リーダーにパイプすると、この問題は発生しません。Less では、不規則な文字が次のように表示されます: <A9><A7>^V^@など。テキストのチャンクが欠落することはありません。

私の問題がどこにあるのかわかりません。パイプされていない出力に不規則な文字が表示されるように端末を構成する方法はありますか?

4

2 に答える 2

1

less生の文字を、これらの印刷できない文字を表す ASCII 文字の組み合わせとして表示するように構成しました。-rまたは--raw-control-charsコマンドラインスイッチはこれを行います:

「生の」制御文字が表示されるようにします。デフォルトでは、キャレット表記を使用して制御文字を表示します。たとえば、control-A (8 進数の 001) は "^A" と表示されます。警告: -r オプションを使用すると、less は画面の実際の外観を追跡できません (これは、各タイプの制御文字に対する画面の応答に依存するためです)。したがって、長い行が間違った場所で分割されるなど、さまざまな表示上の問題が発生する可能性があります。

これは特別なless機能です。

Python プログラムで同じことをしたい場合は、自分で同じ翻訳を行う必要があります。「特殊」文字をエスケープ コードに変換するマッピングを作成します。

nonprintable = {
    '\x00': '^@',
    '\x01': '^A',
    '\x02': '^B',
    '\x03': '^C',
    '\x04': '^D',
    # etc.
}

for i in range(128):
    character = chr(i)
    print i, nonprintable.get(character, character)
于 2013-06-22T18:30:38.943 に答える
0

リモートマシンがユニコードに設定されている可能性があります(最新のLinuxディストリビューションはそうです)。次に、ユニコード設定でもパテを実行していることを確認してください。

于 2013-06-22T18:30:11.290 に答える