python VTEバインディング (debian スクイーズからの python-vte) からターミナルを仮想ターミナル エミュレータとして使用しようとしています (ANSI/制御文字テキスト処理のためだけに)
インタラクティブな python コンソールでは、すべてが (ほぼ) 問題ないように見えます。
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
'a\n b'
ただし、このコード (少し変更) を Python スクリプトとして起動すると、異なる結果が得られます。
$ python vte_wiredness_1.py
''
奇妙なことに、(新しい) インタラクティブな python セッションにコードを貼り付けても、空の文字列が生成されます。
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
''
>>>
最初に頭に浮かんだのは、2 つのケースの唯一の違いはタイミングであるということでしたget_text。残念ながら、get_text数秒の睡眠で前奏曲をしても役に立ちませんでした
それから、Xウィンドウ環境と関係があると思いました。ただし、結果は同じ純粋な Linux コンソールです (グラフィックスの欠落に関する警告がいくつかあります)。
このような予測不可能な動作の原因は何なのだろうか (対話型コンソール - 貼り付け対入力、遅延ではない.. 対話型コンソールは vte 端末オブジェクトとは何の関係もない.. 推測する)
誰かが何が起こっているのか説明できますか? そのような方法で VTE 用語を使用することは可能ですか?
出力の「b」文字の前にスペースがあることは、別の奇妙さです(すべての連続する行の前にさらにスペースがあります..文字列の前にキャリッジリターンを送信する必要があるようです。)
(私が使用しているlambda *a: True get_textメソッドの引数はダミーのコールバックです。それはいくつかのSlotSelectedCallbackです..その説明についても感謝します:))