# -*- coding: UTF-8 -*- import gobject import gtk import subprocess class load_ng: def __init__(self): ### # Initialize the data ### self.error = 0 self.base = '0xB0' self.com = ["ls","-l"] self.log = open('test_pygtk.log', 'w') ### # Initialize the gui ### self.builder = gtk.Builder() self.builder.add_from_file("test_pygtk.ui") self.window = self.builder.get_object("window_main") # text = self.builder.get_object("txt_console") self.txt_buf = text.get_buffer() self.ok_tag = self.txt_buf.create_tag("ok", foreground="lightgreen", weight=700) self.ko_tag = self.txt_buf.create_tag("ko", foreground="red", weight=700) self.err_tag = self.txt_buf.create_tag("err", foreground="red") # connect signals self.builder.connect_signals(self) def on_btn_check_clicked(self, widget): # resetto il flag di errore self.error = 0 self.test_launch() itr = self.txt_buf.get_end_iter() if self.error != 0: self.txt_buf.insert_with_tags(itr, "Unexpected error; please see \nlog file for futher details.\n", self.err_tag) else: self.txt_buf.insert(itr, "###\n") def on_btn_quit_clicked(self, widget): self.log.close() gtk.main_quit() def on_window_main_destroy(self, widget, data=None): self.log.close() gtk.main_quit() def test_launch(self): # if you want, you can change command options here: self.com[1] = "-la" itr = self.txt_buf.get_end_iter() self.txt_buf.insert(itr, "Launching command...\t\t\t\t\t\t") while gtk.events_pending(): gtk.main_iteration_do(False) risposta = subprocess.Popen(self.com, stdout=subprocess.PIPE).communicate()[0] lines = risposta.split('\n') stato = False for line in lines: # maybe a better test can be designed ;) if '.' not in line: stato = True if stato: self.txt_buf.insert_with_tags(itr, "[OK]\n", self.ok_tag) self.txt_buf.insert(itr, risposta) else: self.txt_buf.insert_with_tags(itr, "[Failed]\n", self.ko_tag) self.error = 1 self.log.writelines(risposta) def main(self): self.window.show() gtk.main() pass if __name__=='__main__': app = load_ng() app.window.show() gtk.main()