1
readlineをインポートして私のプログラムにカスタマイズされたタブ補完を追加しました。今私はプログラムの出力を保存する必要がありますが、stdoutをリダイレクトしようとすると、タブの完成機能が損なわれます。Pythonモジュール "readline"が出力リダイレクトを処理できません
私はpython3 script.py | tee txt.txt
の魔女がstdoutとテキストファイルの両方に最も近いように見えましたが、うまくいきませんでした。ここ
は(念のため)、メインからの関数呼び出しを使用してカスタムタブ補完クラスです:stdout
に書かれたものも取得するように、「サル・パッチ」sys.stdout.write
方法:
import readline
class MyCompleter(object):
def __init__(self, options):
self.options = sorted(options)
def complete(self, text, state):
if state == 0:
if text:
self.matches = [s for s in self.options if s and s.startswith(text)]
else:
self.matches = self.options[:]
try:
return self.matches[state]
except IndexError:
return None
def readlineset(a): # function called from main to turn on tab completion
# a is list of strings
readline.set_completer(MyCompleter(a).complete)
readline.parse_and_bind('tab: complete')
[おそらく関連するPythonの問題](https://bugs.python.org/issue24829)背景:readlineは対話型端末で動作するように設計されていますが、出力を別の場所にリダイレクトすると(たとえ 'tee'のように返すとしても)、端末はreadlineに対して非対話的に見えるようになります。 –
( 'tee'ではなく)対話的セッションの出力を記録したい場合は、' typescript'を使用するほうがいいでしょうか? –