PyGobject VTE终端,命令打印两次

时间:2018-03-24 12:54:44

标签: python pygtk pygobject vte

我正在编写一个应用程序,通过SSH连接到少数Linux服务器,使用VTE终端在该服务器上进行一些操作。要连接到此服务器,请使用bash expect命令提供密码。我希望在VTE运行后立即运行此命令,但在这里我有一些丑陋的VTE行为,命令被打印两次到终端,一次打到bash提示符,第二次正常打开bash提示后

echo Here command to connesc ssh 
[drespondek@oc5045316303 ~]$ echo Here command to connesc ssh 
Here command to connesc ssh
[drespondek@oc5045316303 ~]$ 

如何在我的应用中修复此行为? 我知道当我在命令提交之前添加time.sleep(1)时,这正如我所期望的那样,但这不是解决方案。 执行输出whit time.sleep

[drespondek@oc5045316303 ~]$ echo Here command to connesc ssh 
Here command to connesc ssh
[drespondek@oc5045316303 ~]$ 

以下是我如何使用VTE的示例代码

from gi.repository import Gtk, Vte, GLib
import os
import time

class TheWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="test vte terminal")
        self.set_default_size(600, 300)
        self.terminal = Vte.Terminal()
        self.terminal.spawn_sync(
                Vte.PtyFlags.DEFAULT,
                os.environ['HOME'],
                ["/bin/bash"],
                [],
                GLib.SpawnFlags.DO_NOT_REAP_CHILD,
                None,
                None,
                )

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        scroller = Gtk.ScrolledWindow()
        scroller.set_hexpand(True)
        scroller.set_vexpand(True)
        scroller.add(self.terminal)
        box.pack_start(scroller, False, True, 2)
        self.add(box)
        #time.sleep(1)
        self.terminal.feed_child("echo Here command to connesc ssh \n", -1)

win = TheWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

任何人都知道如何在没有睡眠选项的情况下做到这一点?

0 个答案:

没有答案