summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <thibault.saunier@collabora.com>2012-06-18 18:08:07 -0400
committerThibault Saunier <thibault.saunier@collabora.com>2012-06-21 10:00:09 -0400
commit64627f13d676ccc45e70666b888ad63c2748ef2b (patch)
tree7388a1cb82839e22bfba9ee5e0ee7e4e37bf0823
parenta9fcd19d525371c371b5c087dd818e017eeb61f0 (diff)
insanity: Make use of the new RedirectTerminalOuputThread class for terminal redirection
-rw-r--r--insanity/dbustest.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/insanity/dbustest.py b/insanity/dbustest.py
index 5e2c6ed..4b19efc 100644
--- a/insanity/dbustest.py
+++ b/insanity/dbustest.py
@@ -31,6 +31,7 @@ import signal
import time
import dbus
import dbus.gobject_service
+from insanity.threads import RedirectTerminalOuputThread
from insanity.test import Test
from insanity.dbustools import unwrap
from insanity.log import error, warning, debug, info, exception
@@ -144,6 +145,7 @@ class DBusTest(Test, dbus.service.Object):
self._stdin = None
self._stdout = None
self._stderr = None
+ self._redir_tty_thread = None
self._preargs = []
self._environ = env or {}
self._environ.update(os.environ.copy())
@@ -185,11 +187,15 @@ class DBusTest(Test, dbus.service.Object):
self._subprocessspawntime = time.time()
self._process = subprocess.Popen(pargs,
stdin = self._stdin,
- stdout = self._stdout,
- stderr = self._stderr,
+ stdout = subprocess.PIPE,
+ stderr = subprocess.PIPE,
env=self._environ,
shell = shell,
cwd=cwd)
+
+ self._redir_tty_thread = RedirectTerminalOuputThread(self._process,
+ self._stdout, self._stderr)
+ self._redir_tty_thread.start()
self._pid = self._process.pid
except:
exception("Error starting the subprocess command ! %r", pargs)
@@ -233,6 +239,9 @@ class DBusTest(Test, dbus.service.Object):
if self._returncode is None:
self._returncode = utils.kill_process (self._process)
self._process = None
+ if self._redir_tty_thread is not None:
+ self._redir_tty_thread.exit()
+ self._redir_tty_thread = None
if not self._returncode is None:
info("Process returned %d", self._returncode)
self.extraInfo("subprocess-return-code", self._returncode)
@@ -274,6 +283,9 @@ class DBusTest(Test, dbus.service.Object):
info("subprocess returned %r" % res)
self._returncode = res
self._process = None
+ if self._redir_tty_thread is not None:
+ self._redir_tty_thread.abort()
+ self._redir_tty_thread = None
self._processpollid = 0
self.stop()
return False
@@ -334,13 +346,21 @@ class DBusTest(Test, dbus.service.Object):
# Stdin and stderr setters
def setStderr(self, stderr):
self._stderr = stderr
+ if self._process is not None:
+ self._process.stderr = stderr
def setStdout(self, stdout):
self._stderr = stdout
+ if self._process is not None:
+ self._process.stdout = stdout
- def setStdOutAndErr(self, stderrandout):
- self._stdout = stderrandout
+ def setStdOutAndErr(self, stderr_out_path):
+ debug("New path: %s", stderr_out_path)
+ self._stdout = stderr_out_path
self._stderr = self._stdout
+ if self._redir_tty_thread is not None:
+ self._redir_tty_thread.setStdoutFile(stderr_out_path)
+ self._redir_tty_thread.setStderrFile(stderr_out_path)
## Proxies for remote DBUS calls
def callRemoteSetUp(self):