Mercurial > repos > mikel-egana-aranguren > oppl
comparison stderr_wrapper.py @ 19:cc270db37d33 draft
Directories re-arranged
author | Mikel Egana Aranguren <mikel-egana-aranguren@toolshed.g2.bx.psu.edu> |
---|---|
date | Sat, 06 Oct 2012 21:50:39 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
18:d3616fac4ca5 | 19:cc270db37d33 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 """ | |
4 Wrapper that execute a program and its arguments but reports standard error | |
5 messages only if the program exit status was not 0 | |
6 Example: ./stderr_wrapper.py myprog arg1 -f arg2 | |
7 """ | |
8 | |
9 import sys, subprocess | |
10 | |
11 assert sys.version_info[:2] >= ( 2, 4 ) | |
12 | |
13 def stop_err( msg ): | |
14 sys.stderr.write( "%s\n" % msg ) | |
15 sys.exit() | |
16 | |
17 def __main__(): | |
18 # Get command-line arguments | |
19 args = sys.argv | |
20 # Remove name of calling program, i.e. ./stderr_wrapper.py | |
21 args.pop(0) | |
22 # If there are no arguments left, we're done | |
23 if len(args) == 0: | |
24 return | |
25 | |
26 # If one needs to silence stdout | |
27 #args.append( ">" ) | |
28 #args.append( "/dev/null" ) | |
29 | |
30 cmdline = " ".join(args) | |
31 try: | |
32 # Run program | |
33 proc = subprocess.Popen( args=cmdline, shell=True, stderr=subprocess.PIPE ) | |
34 returncode = proc.wait() | |
35 # Capture stderr, allowing for case where it's very large | |
36 stderr = '' | |
37 buffsize = 1048576 | |
38 try: | |
39 while True: | |
40 stderr += proc.stderr.read( buffsize ) | |
41 if not stderr or len( stderr ) % buffsize != 0: | |
42 break | |
43 except OverflowError: | |
44 pass | |
45 # Running Grinder failed: write error message to stderr | |
46 if returncode != 0: | |
47 raise Exception, stderr | |
48 except Exception, e: | |
49 # Running Grinder failed: write error message to stderr | |
50 stop_err( 'Error:\n' + str( e ) ) | |
51 | |
52 | |
53 if __name__ == "__main__": __main__() |