pbs.py revision 1376
11376Sbinkertn@umich.edu# Copyright (c) 2005 The Regents of The University of Michigan 21376Sbinkertn@umich.edu# All rights reserved. 31376Sbinkertn@umich.edu# 41376Sbinkertn@umich.edu# Redistribution and use in source and binary forms, with or without 51376Sbinkertn@umich.edu# modification, are permitted provided that the following conditions are 61376Sbinkertn@umich.edu# met: redistributions of source code must retain the above copyright 71376Sbinkertn@umich.edu# notice, this list of conditions and the following disclaimer; 81376Sbinkertn@umich.edu# redistributions in binary form must reproduce the above copyright 91376Sbinkertn@umich.edu# notice, this list of conditions and the following disclaimer in the 101376Sbinkertn@umich.edu# documentation and/or other materials provided with the distribution; 111376Sbinkertn@umich.edu# neither the name of the copyright holders nor the names of its 121376Sbinkertn@umich.edu# contributors may be used to endorse or promote products derived from 131376Sbinkertn@umich.edu# this software without specific prior written permission. 141376Sbinkertn@umich.edu# 151376Sbinkertn@umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161376Sbinkertn@umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171376Sbinkertn@umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 181376Sbinkertn@umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 191376Sbinkertn@umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 201376Sbinkertn@umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 211376Sbinkertn@umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 221376Sbinkertn@umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 231376Sbinkertn@umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 241376Sbinkertn@umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 251376Sbinkertn@umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 261376Sbinkertn@umich.edu# 271376Sbinkertn@umich.edu# Authors: Nathan Binkert 281376Sbinkertn@umich.edu 291376Sbinkertn@umich.eduimport os, re, sys 301376Sbinkertn@umich.edu 311376Sbinkertn@umich.edudef ssh(host, script, tty = False, user = ''): 321376Sbinkertn@umich.edu args = [ 'ssh', '-x' ] 331376Sbinkertn@umich.edu if user: 341376Sbinkertn@umich.edu args.append('-l' + user) 351376Sbinkertn@umich.edu if tty: 361376Sbinkertn@umich.edu args.append('-t') 371376Sbinkertn@umich.edu args.append(host) 381376Sbinkertn@umich.edu args.append(script) 391376Sbinkertn@umich.edu 401376Sbinkertn@umich.edu return os.spawnvp(os.P_WAIT, args[0], args) 411376Sbinkertn@umich.edu 421376Sbinkertn@umich.educlass qsub: 431376Sbinkertn@umich.edu def __init__(self): 441376Sbinkertn@umich.edu self.hold = False 451376Sbinkertn@umich.edu self.join = False 461376Sbinkertn@umich.edu self.keep_stdout = False 471376Sbinkertn@umich.edu self.keep_stderr = False 481376Sbinkertn@umich.edu self.node_type = '' 491376Sbinkertn@umich.edu self.mail_abort = False 501376Sbinkertn@umich.edu self.mail_begin = False 511376Sbinkertn@umich.edu self.mail_end = False 521376Sbinkertn@umich.edu self.name = '' 531376Sbinkertn@umich.edu self.stdout = '' 541376Sbinkertn@umich.edu self.priority = 0 551376Sbinkertn@umich.edu self.queue = '' 561376Sbinkertn@umich.edu self.pbshost = '' 571376Sbinkertn@umich.edu self.qsub = 'qsub' 581376Sbinkertn@umich.edu self.env = {} 591376Sbinkertn@umich.edu self.onlyecho = False 601376Sbinkertn@umich.edu self.verbose = False 611376Sbinkertn@umich.edu 621376Sbinkertn@umich.edu def do(self, script, ): 631376Sbinkertn@umich.edu args = [self.qsub] 641376Sbinkertn@umich.edu 651376Sbinkertn@umich.edu if self.env: 661376Sbinkertn@umich.edu arg = '-v' 671376Sbinkertn@umich.edu arg += ','.join([ '%s=%s' % i for i in self.env.iteritems() ]) 681376Sbinkertn@umich.edu args.append(arg) 691376Sbinkertn@umich.edu 701376Sbinkertn@umich.edu if self.hold: 711376Sbinkertn@umich.edu args.append('-h') 721376Sbinkertn@umich.edu 731376Sbinkertn@umich.edu if len(self.stdout): 741376Sbinkertn@umich.edu args.append('-olocalhost:' + self.stdout) 751376Sbinkertn@umich.edu 761376Sbinkertn@umich.edu if self.keep_stdout and self.keep_stderr: 771376Sbinkertn@umich.edu args.append('-koe') 781376Sbinkertn@umich.edu elif self.keep_stdout: 791376Sbinkertn@umich.edu args.append('-ko') 801376Sbinkertn@umich.edu elif self.keep_stderr: 811376Sbinkertn@umich.edu args.append('-ke') 821376Sbinkertn@umich.edu else: 831376Sbinkertn@umich.edu args.append('-kn') 841376Sbinkertn@umich.edu 851376Sbinkertn@umich.edu if self.join: 861376Sbinkertn@umich.edu args.append('-joe') 871376Sbinkertn@umich.edu 881376Sbinkertn@umich.edu if len(self.node_type): 891376Sbinkertn@umich.edu args.append('-lnodes=' + self.node_type) 901376Sbinkertn@umich.edu 911376Sbinkertn@umich.edu if self.mail_abort or self.mail_begin or self.mail_end: 921376Sbinkertn@umich.edu flags = '' 931376Sbinkertn@umich.edu if self.mail_abort: 941376Sbinkertn@umich.edu flags.append('a') 951376Sbinkertn@umich.edu if self.mail_begin: 961376Sbinkertn@umich.edu flags.append('b') 971376Sbinkertn@umich.edu if self.mail_end: 981376Sbinkertn@umich.edu flags.append('e') 991376Sbinkertn@umich.edu if len(flags): 1001376Sbinkertn@umich.edu args.append('-m ' + flags) 1011376Sbinkertn@umich.edu 1021376Sbinkertn@umich.edu if len(self.name): 1031376Sbinkertn@umich.edu args.append("-N%s" % self.name) 1041376Sbinkertn@umich.edu 1051376Sbinkertn@umich.edu if self.priority != 0: 1061376Sbinkertn@umich.edu args.append('-p' + self.priority) 1071376Sbinkertn@umich.edu 1081376Sbinkertn@umich.edu if len(self.queue): 1091376Sbinkertn@umich.edu args.append('-q' + self.queue) 1101376Sbinkertn@umich.edu 1111376Sbinkertn@umich.edu args.append(script) 1121376Sbinkertn@umich.edu 1131376Sbinkertn@umich.edu if self.verbose or self.onlyecho: 1141376Sbinkertn@umich.edu print >>sys.stderr, 'PBS Command: ', ' '.join(args) 1151376Sbinkertn@umich.edu 1161376Sbinkertn@umich.edu if self.onlyecho: 1171376Sbinkertn@umich.edu return 0 1181376Sbinkertn@umich.edu 1191376Sbinkertn@umich.edu print >>sys.stderr, 'PBS Jobid: ', 1201376Sbinkertn@umich.edu 1211376Sbinkertn@umich.edu ec = os.spawnvp(os.P_WAIT, args[0], args) 1221376Sbinkertn@umich.edu 1231376Sbinkertn@umich.edu if ec != 0 and len(self.pbshost): 1241376Sbinkertn@umich.edu ec = ssh(self.pbshost, ' '.join(args)) 1251376Sbinkertn@umich.edu 1261376Sbinkertn@umich.edu return ec 127