3

stdinキーボードを使用してプロンプトに応答するときに発生するエコーを抑制する必要があるPythonスクリプトがあります。

キーボードを使用する場合、VT100制御コードを使用して、1行上に移動し、その行をクリアしてから、別の行を上に移動できます(出力が新しく空白になった行をクリアするように)。

ただし、このコードは出力を台無しにし、入力がファイルからのものである場合、有効な出力の行をクリアすることになります(つまり、cat test | myscript.pyこの場合、stdinはstdoutに何もエコーしないようです。

入力がスクリプトに送信される方法を制御できず、ユーザーがキーボードとファイルのどちらを使用するかわかりません。

raw_input()の出力を確認し、入力がキーボードからのものである場合にのみVT100制御コードを実行する方法はありますか?

4

2 に答える 2

7

必要な機能は、ファイルハンドルの isatty (「TTY です」) です。必要に応じて、sys.stdin、sys.stdout、または sys.stderr でテストできます。

>>> import sys
>>> sys.stdin.isatty()
True

ちなみに、インタラクティブなプロンプトを表示するかどうかを検出するために Python も行っていることです (cat | python を試してみてください)。

于 2012-09-25T17:34:35.523 に答える
1

「…の反響を抑えてstdin…」

これは、エコーをオフにしてパスワードを要求する関数です...

于 2012-09-25T17:38:48.423 に答える