Mercurial > bitten > bitten-test
changeset 211:d1ead1bfcc65
Follow-up to [219]: Input to processes now also implemented for Windows.
author | cmlenz |
---|---|
date | Tue, 20 Sep 2005 16:31:03 +0000 |
parents | c550e31c06d2 |
children | 62b668fc713d |
files | bitten/build/api.py |
diffstat | 1 files changed, 39 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/bitten/build/api.py +++ b/bitten/build/api.py @@ -59,18 +59,46 @@ os.chdir(self.cwd) import tempfile - out_name = tempfile.mktemp() - err_name = tempfile.mktemp() - cmd = "( %s ) > %s 2> %s" % (' '.join(args), out_name, err_name) - self.returncode = os.system(cmd) - log.debug('Exited with code %s', self.returncode) + in_name = None + if self.input: + if isinstance(self.input, basestring): + in_file, in_name = tempfile.mkstemp(prefix='bitten_', + suffix='.pipe') + os.write(in_file, self.input) + os.close(in_file) + in_redirect = '< "%s" ' % in_name + else: + in_redirect = '< "%s" ' % self.input.name + else: + in_redirect = '' - out_file = file(out_name, 'r') - err_file = file(err_name, 'r') - out_lines = out_file.readlines() - err_lines = err_file.readlines() - out_file.close() - err_file.close() + out_file, out_name = tempfile.mkstemp(prefix='bitten_', + suffix='.pipe') + os.close(out_file) + err_file, err_name = tempfile.mkstemp(prefix='bitten_', + suffix='.pipe') + os.close(err_file) + + try: + cmd = '( %s ) > "%s" %s 2> "%s"' % (' '.join(args), out_name, + in_redirect, err_name) + self.returncode = os.system(cmd) + log.debug('Exited with code %s', self.returncode) + + out_file = file(out_name, 'r') + err_file = file(err_name, 'r') + out_lines = out_file.readlines() + err_lines = err_file.readlines() + out_file.close() + err_file.close() + finally: + if in_name: + os.unlink(in_name) + if out_name: + os.unlink(out_name) + if err_name: + os.unlink(err_name) + for out_line, err_line in self._combine(out_lines, err_lines): yield out_line and out_line.rstrip(), \ err_line and err_line.rstrip()