2014-05-10 6 views
2

Я использую модуль VTE в окне GTK, чтобы запустить и показать результат сценария bash.Python Gtk2 & Vte ждет процесса Pid завершен

 adresse = self.champ.get_text()  
     pid = self.v.fork_command(None, ['/bin/bash', "./pluzz.sh", adresse]) 

     if pid == None:   #pseudocode 
      print "Finish" 

Ребенок-процесс блокируется (не запускается), если есть time.sleep или цикл. Как я могу это сделать? Благодаря

Edit: Пробовал это:

def check_pid(pid):   
    """ Check For the existence of a unix pid. """ 
    try: 
     os.kill(pid, 0) 
    except OSError: 
     return False 
    else: 
     return True 

Проблема в том, что возвращение когда-то, правда, и если я пишу цикл, сценарий Баш блокирует.

+0

Что вы ожидаете 'pid' быть, когда вы проверяете его в если заявление. Извините, я действительно не знаю об этом наборе инструментов, просто пытаюсь помочь ... – sshashank124

+0

Я отредактировал свой вопрос, но я не знаю, хорошо ли это. Vte fork терминал в окне Gtk, например Xterm, но интегрированный – Guillaume

+0

Я прочитал здесь http://stackoverflow.com/questions/10684180/python-checking-if-a-fork-process-is-finished, но я не знаю, Знаю, если это то же самое. Я не понимаю код .. – Guillaume

ответ

0

Я нашел решение:

def __init__(self): 
    a=0 
    self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    [...] 
    self.v = vte.Terminal() 
# self.v.connect ("child-exited", lambda term: gtk.main_quit()) # this is the line to change 
    self.v.connect ("child-exited", lambda term: self.copie(self, a)) # the redirection after the process is finish 
    self.v.show() 

def download(self, a, donnees=None): 
    child_pid = self.v.fork_command(None, ['/bin/bash', "./pluzz.sh", adresse]) 

def copie(self, a, donnees=None):   
       print "FINISH"