diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2006-09-12 15:16:33 +0200 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2006-09-12 15:16:33 +0200 |
| commit | 7035132c76acf5fd72e62437e487f411bf726d5c (patch) | |
| tree | 9c59887bf9602e326d5737cd4711192af2cd116c /apt/progress.py | |
| parent | 8572d7a6dff1c3b5e8b27fcfbc36bd13232be598 (diff) | |
| download | python-apt-7035132c76acf5fd72e62437e487f411bf726d5c.tar.gz | |
* apt/progress.py:
- use select() when waiting for child input
Diffstat (limited to 'apt/progress.py')
| -rw-r--r-- | apt/progress.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/apt/progress.py b/apt/progress.py index d69ca6e6..8ac0e1dc 100644 --- a/apt/progress.py +++ b/apt/progress.py @@ -24,6 +24,8 @@ import os import re import fcntl import string +from errno import * +import select import apt_pkg class OpProgress(object): @@ -144,6 +146,7 @@ class InstallProgress(DumbInstallProgress): """ def __init__(self): DumbInstallProgress.__init__(self) + self.selectTimeout = 0.1 (read, write) = os.pipe() self.writefd=write self.statusfd = os.fdopen(read, "r") @@ -167,7 +170,7 @@ class InstallProgress(DumbInstallProgress): self.read += os.read(self.statusfd.fileno(),1) except OSError, (errno,errstr): # resource temporarly unavailable is ignored - if errno != 11: + if errno != EAGAIN and errnor != EWOULDBLOCK: print errstr if self.read.endswith("\n"): s = self.read @@ -189,15 +192,15 @@ class InstallProgress(DumbInstallProgress): self.percent = float(percent) self.status = string.strip(status_str) self.read = "" - def fork(self): return os.fork() def waitChild(self): while True: + select.select([self.statusfd],[],[], self.selectTimeout) + self.updateInterface() (pid, res) = os.waitpid(self.child_pid,os.WNOHANG) if pid == self.child_pid: break - self.updateInterface() return os.WEXITSTATUS(res) def run(self, pm): pid = self.fork() |
