set_noblock(self.job.stdout)
set_noblock(self.job.stderr)
self.wc = gobject.child_watch_add(self.job.pid, self.done)
- self.wout = gobject.io_add_watch(self.job.stdout, gobject.IO_IN, self.read)
- self.werr = gobject.io_add_watch(self.job.stderr, gobject.IO_IN, self.read)
+ self.wout = gobject.io_add_watch(self.job.stdout, gobject.IO_IN | gobject.IO_ERR | gobject.IO_HUP, self.read)
+ self.werr = gobject.io_add_watch(self.job.stderr, gobject.IO_IN | gobject.IO_ERR | gobject.IO_HUP, self.read)
self.displayed = True
self.buff.insert(self.buff.get_end_iter(), l)
gobject.idle_add(self.adjust)
if l == "":
+ if self.job:
+ gobject.source_remove(self.wout)
+ gobject.source_remove(self.werr)
+ try:
+ self.job.terminate()
+ except:
+ pass
+ self.job.wait()
+ self.job.stdout.close()
+ self.job.stderr.close()
+ self.job = None
+ self.owner.update(self, None)
return False
return True
adj.set_value(adj.upper - adj.page_size)
def done(self, *a):
- self.read(self.job.stdout, None)
- self.read(self.job.stderr, None)
- gobject.source_remove(self.wout)
- gobject.source_remove(self.werr)
- self.job.stdout.close()
- self.job.stderr.close()
+ if self.job:
+ self.read(self.job.stdout, None)
+ self.read(self.job.stderr, None)
+ if self.job:
+ gobject.source_remove(self.wout)
+ gobject.source_remove(self.werr)
+ self.job.stdout.close()
+ self.job.stderr.close()
self.job = None
self.owner.update(self, None)