我正在编写一个应用程序来通过 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) 时,这可以正常工作,但这不是解决方案。执行输出时间.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()
有人知道我如何在没有睡眠选项的情况下做到这一点吗?