質問
Pythonの端子を使用しようとしています vte 仮想端子エミュレーターとしてのバインディング(Debian SqueezeのPython-Vte)(ANSI/Control Chars Text Processing専用)
インタラクティブな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コンソールです(不足しているグラフィックスに何らかの警告があります)。
このような予測不可能な動作(インタラクティブコンソール - 貼り付けられたVSと入力されたものであり、それは遅延ではないのだろうか。
誰かが何が起こっているのかを説明できますか? VTE用語をそのような方法で使用することは可能ですか?
出力内の「B」文字の前にスペースがあることは、別の奇妙さです(すべての連続した行の前には、より多くのスペースがあります。
( lambda *a: True
get_text 私が使用しているメソッド引数はダミーコールバックです、それはいくつかです SlotSelectedCallback..その説明のために、私も感謝します:))
解決
..私が他の場所で見つけた解決策を自分自身で投稿してください
問題は、vte.terminalがGTKアプレットであるという事実を無視していたため、GTKメインループを呼び出さなければならないということでした。
import gtk
import vte
term = vte.Terminal()
term.feed("a\r\nb")
def get_text(term):
print repr(term.get_text(lambda *a: True).rstrip())
gtk.main_quit()
term.connect('contents-changed', get_text)
gtk.main()
Juhaz@irc://freenode.net/##gnomeに感謝します