gpt4 book ai didi

python - Gtk.Vte 和 feed_child : command sent two time

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:58 25 4
gpt4 key购买 nike

我正在构建一个选项卡式 python 终端来管理多个 ssh 连接(如 superputty 或 windows 上的 putty 管理器),所以我使用 feed_child 向终端发送命令,但有一个小问题:命令在终端,在一切之前准时..代码更好:

我用它来发送命令(在这种情况下,例如命令是 uptime)

if self.command != "":
self.length_command = len(self.command) + 1
self.hbox.term.feed_child(self.command + "\n", self.length_command)

但是在终端我得到了这个结果

uptime
maurelio@myhost1 ~ $ uptime
19:04:18 up 15 days, 14:32, 2 users, load average: 0,04, 0,07, 0,14
maurelio@myhost1

如您所见,当我启动程序或打开新标签页时,uptime 像普通文本一样出现在终端中,然后出现提示并正确执行命令。我只想得到这个:

maurelio@myhost1 ~ $ uptime
19:04:18 up 15 days, 14:32, 2 users, load average: 0,04, 0,07, 0,14
maurelio@myhost1

有什么想法吗?

更新这里有一个完整的代码(应该可以工作):-)

#!/usr/bin/env python
# -*- coding: utf-8; -*-
from gi.repository import Gtk, Vte, GLib
import os

class Terminal(Vte.Terminal):
"""Just create a standard terminal with some configuration
"""
def __init__(self):
super(Terminal, self).__init__()
self.configure_terminal()

def configure_terminal(self):
self.set_audible_bell(False)
self.set_visible_bell(False)
self.set_sensitive(True)
self.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/bash"],
[], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None)

class Window(Gtk.Window):

def __init__(self):
Gtk.Window.__init__(self, title="Terminal")

self.box = Gtk.Box(spacing=6)
self.add(self.box)

self.term = Terminal()
self.box.pack_start(self.term, True, True, 0)

self.term.set_audible_bell(False)
self.term.set_visible_bell(False)
self.term.set_sensitive(True)
self.term.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/bin/bash"],
[], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None)

self.command = 'uptime'
self.length_command = len(self.command) + 1
self.term.feed_child(self.command + "\n", self.length_command)

self.term.connect("child-exited", Gtk.main_quit)


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

如果你运行它,你会发现问题所在。谢谢。

最佳答案

您忘记先将 Vte 终端添加到 ScrolledWindow 中:

    Gtk.Window.__init__(self, title="Terminal")
self.set_default_size(600, 300)

self.box = Gtk.Box(spacing=6)
self.add(self.box)

self.term = Terminal()
self.sw = Gtk.ScrolledWindow()
self.sw.add(self.term)
self.box.pack_start(self.sw, True, True, 0)

关于python - Gtk.Vte 和 feed_child : command sent two time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com