I
I
iandriyanov2012-10-11 13:21:07
Python
iandriyanov, 2012-10-11 13:21:07

Output to parent window

Good afternoon.

Right off the bat:

#!/usr/bin/env python
# --*-- coding:utf-8 --*--
  
import pygtk
pygtk.require('2.0')
import gtk
from subprocess import call
import platform
  
class Table:
    # Наш callback.
    # Данные передаваемые этому методу выводятся в stdout
    def callback(self, widget, data=None):
        print "Привет снова - %s была нажата" % data
  
    # Этот callback завершает программу
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def _list(self, widget, data=None):
        call(["ls", "-la"])

    def _get_os(self, widget, data=None):
#        platform.system()
        if platform.dist()[0] == "Ubuntu":
            print "Ubuntu"
#            subprocess.call(["sudo", "apt-get", "update"])
        else:
            print "Other"
  
    def __init__(self):
        # Создаём новое окно
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  
        # Устанавливаем заголовок окна
        self.window.set_title("Что то простое v.:0.1")
  
        # Устанавливаем обработчик для delete_event, который немедленно
        # Завершает работу GTK.
        self.window.connect("delete_event", self.delete_event)
  
        # Устанавливаем границу для окна
        self.window.set_border_width(20)
  
        # Создаём таблицу 2х2
        table = gtk.Table(3, 2, True)
  
        # Размещаем таблицу в главном окне
        self.window.add(table)
  
        # Создаём первую кнопку
        button = gtk.Button("кнопка 1")
  
        # По нажатии кнопки мы вызываем метод "callback"
        # с указателем на "кнопка 1" в виде аргумента
        button.connect("clicked", self.callback, "кнопка 1")
  
  
        # Вставляем кнопку 1 в верхнюю левую ячейку таблицы
        table.attach(button, 0, 1, 0, 1)
  
        button.show()
  
        # Создаём вторую кнопку
  
        button2 = gtk.Button("кнопка 2")
  
        # По нажатию кнопки мы вызываем метод "callback"
        # с указателем на "кнопка 2" как аргумент
        button2.connect("clicked", self.callback, "кнопка 2")
        # Вставляем кнопку 2 в верхнюю правую ячейку таблицы.
        table.attach(button2, 1, 2, 0, 1)
  
        button2.show()
  
        # Создаём кнопку "Выход"
        button3 = gtk.Button("Выход")
  
        # Когда кнопка нажата, мы вызываем функцию main_quit
        # и программа завершает свою работу
        button3.connect("clicked", lambda w: gtk.main_quit())
  
        # Вставляем кнопку выхода в 2 нижние ячейки.
        table.attach(button3, 0, 2, 1, 2)
  
        button3.show()
 
        button4 = gtk.Button("Листинг директории")
        button4.connect("clicked", self._list, "Листинг")
        table.attach(button4, 0, 2, 2, 3)
        button4.show()

        button5 = gtk.Button("Версия ОС")
        button5.connect("clicked", self._get_os, "Листинг")
        table.attach(button5, 0, 2, 3, 4)
        button5.show()
 
        table.show()
        self.window.show()
  
def main():
    gtk.main()
    return 0      
  
if __name__ == "__main__":
    Table()
    main()


There is such a not-so-ideal code, written as an example, and in order to bring it to life. But unfortunately I didn’t find in the textbooks how, when you call the script not from the console, but with the launch shortcut, let’s say “user-from-desktop”. And of course, as you can see from the code, there are calls to external processes, let's say "ls -la", how to output the output to the window so that the user can see it?

Thank you.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
J
JustAMan, 2012-10-11
@JustAMan

import subprocess

proc = subprocess.Popen(['ls','-la', some-other-args], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
out, err = proc.communicate()

will do the same as subprocess.call(), only out and err will contain the output of the process to stdout and stderr, respectively.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question