1# Copyright (c) 2005 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 77 unchanged lines hidden (view full) --- 86 if self.status < 0: 87 pid, status = os.waitpid(self.pid, 0) 88 if pid == self.pid: 89 self.status = status 90 return self.status 91 92class qsub: 93 def __init__(self): |
94 self.afterok = None |
95 self.hold = False 96 self.join = False 97 self.keep_stdout = False 98 self.keep_stderr = False |
99 self.node_type = None |
100 self.mail_abort = False 101 self.mail_begin = False 102 self.mail_end = False |
103 self.name = None 104 self.stdout = None 105 self.priority = None 106 self.queue = None 107 self.pbshost = None |
108 self.qsub = 'qsub' 109 self.env = {} 110 111 def build(self, script, args = []): 112 self.cmd = [ self.qsub ] 113 114 if self.env: 115 arg = '-v' 116 arg += ','.join([ '%s=%s' % i for i in self.env.iteritems() ]) 117 self.cmd.append(arg) 118 119 if self.hold: 120 self.cmd.append('-h') 121 |
122 if self.stdout: |
123 self.cmd.append('-olocalhost:' + self.stdout) 124 125 if self.keep_stdout and self.keep_stderr: 126 self.cmd.append('-koe') 127 elif self.keep_stdout: 128 self.cmd.append('-ko') 129 elif self.keep_stderr: 130 self.cmd.append('-ke') 131 else: 132 self.cmd.append('-kn') 133 134 if self.join: 135 self.cmd.append('-joe') 136 |
137 if self.node_type: |
138 self.cmd.append('-lnodes=' + self.node_type) 139 140 if self.mail_abort or self.mail_begin or self.mail_end: 141 flags = '' 142 if self.mail_abort: 143 flags.append('a') 144 if self.mail_begin: 145 flags.append('b') 146 if self.mail_end: 147 flags.append('e') 148 if len(flags): 149 self.cmd.append('-m ' + flags) 150 |
151 if self.name: |
152 self.cmd.append("-N%s" % self.name) 153 |
154 if self.priority: |
155 self.cmd.append('-p' + self.priority) 156 |
157 if self.queue: |
158 self.cmd.append('-q' + self.queue) 159 |
160 if self.afterok: 161 self.cmd.append('-Wdepend=afterok:%s' % self.after) 162 |
163 self.cmd.extend(args) 164 self.script = script 165 self.command = ' '.join(self.cmd + [ self.script ]) 166 167 def do(self): 168 pbs = MyPOpen(self.cmd + [ self.script ]) 169 self.result = pbs.fromchild.read() 170 ec = pbs.wait() 171 172 if ec != 0 and self.pbshost: 173 cmd = ' '.join(self.cmd + [ '-' ]) 174 cmd = [ 'ssh', '-x', self.pbshost, cmd ] 175 self.command = ' '.join(cmd) 176 ssh = MyPOpen(cmd, input = self.script) 177 self.result = ssh.fromchild.read() 178 ec = ssh.wait() 179 180 return ec |