comparison cummerbund_wrapper.py @ 1:65940895e1c6

Uploaded
author cjav
date Tue, 14 Feb 2012 11:58:56 -0500
parents
children
comparison
equal deleted inserted replaced
0:6e2abd76a853 1:65940895e1c6
1 #!/usr/bin/env python
2
3 ### Runs "r_script" and generates a HTML report
4 ### Inspired on cuffdiff_wrapper.py and gatk_wrapper.py
5 ### Carlos Borroto <carlos.borroto@gmail.com>
6
7 import optparse, os, shutil, subprocess, sys, tempfile
8
9 def stop_err( msg ):
10 sys.stderr.write( "%s\n" % msg )
11 sys.exit()
12
13 def html_report_from_directory( html_out, dir ):
14 html_out.write( '<html>\n<head>\n<title>Galaxy - cummeRbund Output</title>\n</head>\n<body>\n<p/>\n<ul>\n' )
15 for fname in sorted( os.listdir( dir ) ):
16 html_out.write( '<li><a href="%s">%s</a></li>\n' % ( fname, fname ) )
17 html_out.write( '</ul>\n</body>\n</html>\n' )
18
19 def __main__():
20 #Parse Command Line
21 parser = optparse.OptionParser()
22
23 # wrapper options
24 parser.add_option('', '--r-script', dest='r_script', help='R script')
25 parser.add_option('', '--html-report-from-directory', dest='html_report_from_directory', type="string", nargs=2, help='"Target HTML File" "Directory"')
26
27 (options, args) = parser.parse_args()
28
29 (html_filename, html_dir) = options.html_report_from_directory
30
31 # Make html report directory for output.
32 os.mkdir( html_dir )
33
34 # Make a tmp dir
35 tmp_dir = tempfile.mkdtemp( prefix='tmp-cummeRbund-' )
36
37 # Build command.
38 cmd = ( "Rscript --vanilla %s" % options.r_script )
39
40 # Debugging.
41 print cmd
42
43 # Run command.
44 try:
45 tmp_name = tempfile.NamedTemporaryFile( dir=tmp_dir ).name
46 tmp_stderr = open( tmp_name, 'wb' )
47 proc = subprocess.Popen( args=cmd, shell=True, cwd=html_dir, stderr=tmp_stderr.fileno() )
48 returncode = proc.wait()
49 tmp_stderr.close()
50
51 # Get stderr, allowing for case where it's very large.
52 tmp_stderr = open( tmp_name, 'rb' )
53 stderr = ''
54 buffsize = 1048576
55 try:
56 while True:
57 stderr += tmp_stderr.read( buffsize )
58 if not stderr or len( stderr ) % buffsize != 0:
59 break
60 except OverflowError:
61 pass
62 tmp_stderr.close()
63
64 # Error checking.
65 if returncode != 0:
66 raise Exception, stderr
67 except Exception, e:
68 stop_err( 'Error running R script. ' + str( e ) )
69
70 # write the html report
71 html_report_from_directory( open( html_filename, 'wb' ), html_dir )
72
73 # Clean up temp dirs
74 if os.path.exists( tmp_dir ):
75 shutil.rmtree( tmp_dir )
76
77 if __name__=="__main__": __main__()