[svn r37743] ah, there was yet another version of capturing hiding
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									df8ff8144c
								
							
						
					
					
						commit
						c413f11daf
					
				|  | @ -1,73 +0,0 @@ | ||||||
| """ |  | ||||||
| A quick hack to capture stdout/stderr. |  | ||||||
| """ |  | ||||||
| 
 |  | ||||||
| import os, sys |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Capture: |  | ||||||
| 
 |  | ||||||
|     def __init__(self, mixed_out_err = False): |  | ||||||
|         "Start capture of the Unix-level stdout and stderr." |  | ||||||
|         if (not hasattr(os, 'tmpfile') or |  | ||||||
|             not hasattr(os, 'dup') or |  | ||||||
|             not hasattr(os, 'dup2') or |  | ||||||
|             not hasattr(os, 'fdopen')): |  | ||||||
|             self.dummy = 1 |  | ||||||
|         else: |  | ||||||
|             self.dummy = 0 |  | ||||||
|             # make new stdout/stderr files if needed |  | ||||||
|             self.localoutfd = os.dup(1) |  | ||||||
|             self.localerrfd = os.dup(2) |  | ||||||
|             if hasattr(sys.stdout, 'fileno') and sys.stdout.fileno() == 1: |  | ||||||
|                 self.saved_stdout = sys.stdout |  | ||||||
|                 sys.stdout = os.fdopen(self.localoutfd, 'w', 1) |  | ||||||
|             else: |  | ||||||
|                 self.saved_stdout = None |  | ||||||
|             if hasattr(sys.stderr, 'fileno') and sys.stderr.fileno() == 2: |  | ||||||
|                 self.saved_stderr = sys.stderr |  | ||||||
|                 sys.stderr = os.fdopen(self.localerrfd, 'w', 0) |  | ||||||
|             else: |  | ||||||
|                 self.saved_stderr = None |  | ||||||
|             self.tmpout = os.tmpfile() |  | ||||||
|             if mixed_out_err: |  | ||||||
|                 self.tmperr = self.tmpout |  | ||||||
|             else: |  | ||||||
|                 self.tmperr = os.tmpfile() |  | ||||||
|             os.dup2(self.tmpout.fileno(), 1) |  | ||||||
|             os.dup2(self.tmperr.fileno(), 2) |  | ||||||
| 
 |  | ||||||
|     def done(self): |  | ||||||
|         "End capture and return the captured text (stdoutfile, stderrfile)." |  | ||||||
|         if self.dummy: |  | ||||||
|             import cStringIO |  | ||||||
|             return cStringIO.StringIO(), cStringIO.StringIO() |  | ||||||
|         else: |  | ||||||
|             os.dup2(self.localoutfd, 1) |  | ||||||
|             os.dup2(self.localerrfd, 2) |  | ||||||
|             if self.saved_stdout is not None: |  | ||||||
|                 f = sys.stdout |  | ||||||
|                 sys.stdout = self.saved_stdout |  | ||||||
|                 f.close() |  | ||||||
|             else: |  | ||||||
|                 os.close(self.localoutfd) |  | ||||||
|             if self.saved_stderr is not None: |  | ||||||
|                 f = sys.stderr |  | ||||||
|                 sys.stderr = self.saved_stderr |  | ||||||
|                 f.close() |  | ||||||
|             else: |  | ||||||
|                 os.close(self.localerrfd) |  | ||||||
|             self.tmpout.seek(0) |  | ||||||
|             self.tmperr.seek(0) |  | ||||||
|             return self.tmpout, self.tmperr |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == '__main__': |  | ||||||
|     # test |  | ||||||
|     c = Capture() |  | ||||||
|     try: |  | ||||||
|         os.system('echo hello') |  | ||||||
|     finally: |  | ||||||
|         fout, ferr = c.done() |  | ||||||
|     print 'Output:', `fout.read()` |  | ||||||
|     print 'Error:', `ferr.read()` |  | ||||||
		Loading…
	
		Reference in New Issue