質問

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に感謝します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top