Deleted Added
sdiff udiff text old ( 1376:190de61fed5a ) new ( 1385:a80f052561fd )
full compact
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

--- 12 unchanged lines hidden (view full) ---

21# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26#
27# Authors: Nathan Binkert
28
29import os, re, sys
30
31def ssh(host, script, tty = False, user = ''):
32 args = [ 'ssh', '-x' ]
33 if user:
34 args.append('-l' + user)
35 if tty:
36 args.append('-t')
37 args.append(host)
38 args.append(script)
39
40 return os.spawnvp(os.P_WAIT, args[0], args)
41
42class qsub:
43 def __init__(self):
44 self.hold = False
45 self.join = False
46 self.keep_stdout = False
47 self.keep_stderr = False
48 self.node_type = ''
49 self.mail_abort = False
50 self.mail_begin = False
51 self.mail_end = False
52 self.name = ''
53 self.stdout = ''
54 self.priority = 0
55 self.queue = ''
56 self.pbshost = ''
57 self.qsub = 'qsub'
58 self.env = {}
59 self.onlyecho = False
60 self.verbose = False
61
62 def do(self, script, ):
63 args = [self.qsub]
64
65 if self.env:
66 arg = '-v'
67 arg += ','.join([ '%s=%s' % i for i in self.env.iteritems() ])
68 args.append(arg)
69
70 if self.hold:
71 args.append('-h')
72
73 if len(self.stdout):
74 args.append('-olocalhost:' + self.stdout)
75
76 if self.keep_stdout and self.keep_stderr:
77 args.append('-koe')
78 elif self.keep_stdout:
79 args.append('-ko')
80 elif self.keep_stderr:
81 args.append('-ke')
82 else:
83 args.append('-kn')
84
85 if self.join:
86 args.append('-joe')
87
88 if len(self.node_type):
89 args.append('-lnodes=' + self.node_type)
90
91 if self.mail_abort or self.mail_begin or self.mail_end:
92 flags = ''
93 if self.mail_abort:
94 flags.append('a')
95 if self.mail_begin:
96 flags.append('b')
97 if self.mail_end:
98 flags.append('e')
99 if len(flags):
100 args.append('-m ' + flags)
101
102 if len(self.name):
103 args.append("-N%s" % self.name)
104
105 if self.priority != 0:
106 args.append('-p' + self.priority)
107
108 if len(self.queue):
109 args.append('-q' + self.queue)
110
111 args.append(script)
112
113 if self.verbose or self.onlyecho:
114 print >>sys.stderr, 'PBS Command: ', ' '.join(args)
115
116 if self.onlyecho:
117 return 0
118
119 print >>sys.stderr, 'PBS Jobid: ',
120
121 ec = os.spawnvp(os.P_WAIT, args[0], args)
122
123 if ec != 0 and len(self.pbshost):
124 ec = ssh(self.pbshost, ' '.join(args))
125
126 return ec