annotate bcftools_view.py @ 1:b779fe0b2bc1 draft default tip

Deleted selected files
author slegras
date Fri, 27 Feb 2015 05:39:14 -0500
parents ecdf828ed643
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
1 #!/usr/bin/env python
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
2
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
3 """
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
4 Wrapper that execute a program and its arguments but reports standard error
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
5 messages only if the program exit status was not 0
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
6 Example: ./stderr_wrapper.py myprog arg1 -f arg2
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
7 """
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
8
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
9 import sys, subprocess
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
10
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
11 assert sys.version_info[:2] >= ( 2, 4 )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
12
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
13 def stop_err( msg ):
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
14 sys.stderr.write( "%s\n" % msg )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
15 sys.exit()
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
16
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
17 def __main__():
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
18 # Get command-line arguments
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
19 args = sys.argv
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
20 # Remove name of calling program, i.e. ./stderr_wrapper.py
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
21 args.pop(0)
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
22 # If there are no arguments left, we're done
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
23 if len(args) == 0:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
24 return
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
25
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
26 # If one needs to silence stdout
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
27 #args.append( ">" )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
28 #args.append( "/dev/null" )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
29
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
30 cmdline = " ".join(args)
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
31 try:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
32 # Run program
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
33 proc = subprocess.Popen( args=cmdline, shell=True, stderr=subprocess.PIPE )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
34 returncode = proc.wait()
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
35 # Capture stderr, allowing for case where it's very large
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
36 stderr = ''
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
37 buffsize = 1048576
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
38 try:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
39 while True:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
40 stderr += proc.stderr.read( buffsize )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
41 if not stderr or len( stderr ) % buffsize != 0:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
42 break
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
43 except OverflowError:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
44 pass
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
45 # Running Grinder failed: write error message to stderr
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
46 if returncode != 0:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
47 raise Exception, stderr
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
48 except Exception, e:
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
49 # Running Grinder failed: write error message to stderr
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
50 stop_err( 'Error:\n' + str( e ) )
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
51
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
52
ecdf828ed643 Uploaded
slegras
parents:
diff changeset
53 if __name__ == "__main__": __main__()