2014-05-19 107 views
1

我正试图实现以下功能。我建立了一些gtk应用程序,它会有一些数据,比如说a,b和c。让vte终端与运行python脚本进行通信

我现在想要的是某种终端窗口,其中我可以查询和更改数据,就像我在例如IPython的

$ a 
[1 2 3] 
$ a= a+1 
$ a 

[2 3 4] 

而且让这个走在GTK应用效果。这是可行的吗?

+0

你有建立你的vte吗? – Guillaume

+0

嗨。我不太明白这个问题。我应该如何构建它?但总的来说,我对这些主题的经验很少,所以可能对您的问题的答案是“否”。 –

回答

0

您可以尝试通过子进程来启动的xterm,和file.py和长期之间的沟通,复制环境变量的增值经销商,并得到它:

os.environ[your_var] 
0

看看这个。一旦你在输入“python”。关于与脚本进行通信,我发现的唯一方法是使用外部文件。你想要的可能是复杂的。 here你有一个例子,我让我从VTE终端返回变量“tty”到python脚本。

from gi.repository import Gtk, GObject, Vte 
#GObject is not required. I just import it everywhere just in case. 
#Gtk, Vte, and GLib are required. 
from gi.repository import GLib 
import os 
#os.environ['HOME'] helps to keep from hard coding the home string. 
#os is not required unless you want that functionality. 

class TheWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="inherited cell renderer") 
     self.set_default_size(600, 300) 
     self.terminal  = Vte.Terminal() 
     self.terminal.fork_command_full(
       Vte.PtyFlags.DEFAULT, #default is fine 
       os.environ['HOME'], #where to start the command? 
       ["/bin/sh"], #where is the emulator? 
       [], #it's ok to leave this list empty 
       GLib.SpawnFlags.DO_NOT_REAP_CHILD, 
       None, #at least None is required 
       None, 
       ) 
     #Set up a button to click and run a demo command 
     self.button = Gtk.Button("Do The Command") 
     #To get the command to automatically run 
     #a newline(\n) character is used at the end of the 
     #command string. 
     self.command = "echo \"Sending this command to a virtual terminal.\"\n" 
     command = Gtk.Label("The command: "+self.command) 
     self.button.connect("clicked", self.InputToTerm) 
     #end demo command code 

     #set up the interface 
     box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 
     box.pack_start(self.button, False, True, 0) 
     box.pack_start(command, False, True, 1) 
     #a scroll window is required for the terminal 
     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) 

    def InputToTerm(self, clicker): 
     #get the command when the button is clicked 
     length = len(self.command) 
     #A length is not required but is the easiest mechanism. 
     #Otherwise the command must be null terminated. 
     #Feed the command to the terminal. 
     self.terminal.feed_child(self.command, length) 


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