upgrade to python3;add some validator examples

This commit is contained in:
2025-10-11 12:33:24 +08:00
parent 65632f0e60
commit 487c041148
25 changed files with 1492 additions and 317 deletions

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
import os, sys, string, signal, resource, time, getopt, pickle
@@ -43,22 +43,23 @@ class RunGuard:
optlist, self.args = getopt.gnu_getopt(sys.argv, 'e:t:m:d:o:T:p')
for o, v in optlist:
if o == '-e':
self.nproc += string.atoi(v)
self.nproc += int(v)
if o == '-t':
self.timelimit = string.atoi(v)
self.timelimit = int(v)
if o == '-m':
self.memlimit = string.atoi(v) * 1024
self.memlimit = int(v) * 1024
if o == '-d':
self.rundir = v
if o == '-o':
self.writeto = v
if o == '-T':
self.timetime = string.atoi(v)
self.timetime = int(v)
if o == '-p':
self.usepickle = True
v = os.getenv('GUARD_RLIMIT_OFILE')
if v: self.ofile = string.atoi(v)
if v:
self.ofile = int(v)
self.ldpreload = os.getenv('GUARD_LD_PRELOAD')
def execute(self):
@@ -90,7 +91,7 @@ class RunGuard:
while pid == 0:
try:
os.kill(self.childpid, signal.SIGKILL)
except OSError, e:
except OSError:
pass
pid, status, ru = os.wait4(self.childpid, os.WNOHANG)
time.sleep(0.1)
@@ -106,24 +107,27 @@ class RunGuard:
def _get_memused(self):
procdir = '/proc/%d' % self.childpid
if os.path.isdir(procdir):
cmdline = file(procdir + '/cmdline', 'r').readlines()
with open(procdir + '/cmdline', 'r') as f:
cmdline = f.readlines()
# do not get memory usage of this script after just fork
if len(cmdline) > 0 and \
string.strip(cmdline[0], '\0') != \
string.join(self.args[1:], '\0'):
cmdline[0].strip('\0') != \
'\0'.join(self.args[1:]):
return
procstatus = file(procdir + '/status', 'r')
rss = 0; data = 0; stack = 0
for line in procstatus:
n = line[0:6]
if n == 'VmRSS:':
rss = string.atoi(line[7:-3])
if n == 'VmData':
data = string.atoi(line[8:-3])
if n == 'VmStk:':
stack = string.atoi(line[7:-3])
with open(procdir + '/status', 'r') as procstatus:
rss = 0
data = 0
stack = 0
for line in procstatus:
n = line[0:6]
if n == 'VmRSS:':
rss = int(line[7:-3])
if n == 'VmData':
data = int(line[8:-3])
if n == 'VmStk:':
stack = int(line[7:-3])
self.memrss = max(self.memrss, rss)
if self.memdata + self.memstack < data + stack:
self.memdata = data
@@ -134,26 +138,23 @@ class RunGuard:
if self.writeto == None:
f = sys.stdout
else:
f = file(self.writeto, 'w')
if self.usepickle:
obj = { 'exitcode' : self.exitcode,
'sig' : self.sig,
'timeused' : self.timeused,
'memrss' : self.memrss,
'memdata' : self.memdata,
'memstack' : self.memstack }
pickle.dump(obj, f)
else:
print >>f, "exitcode: %d" % self.exitcode
print >>f, "sig: %d" % self.sig
print >>f, "time: %.3f" % self.timeused
print >>f, "rss: %d" % self.memrss
print >>f, "data: %d" % self.memdata
print >>f, "stack: %d" % self.memstack
if self.writeto != None: f.close()
with open(self.writeto, 'w') as f:
if self.usepickle:
obj = { 'exitcode' : self.exitcode,
'sig' : self.sig,
'timeused' : self.timeused,
'memrss' : self.memrss,
'memdata' : self.memdata,
'memstack' : self.memstack }
pickle.dump(obj, f)
else:
print("exitcode: %d" % self.exitcode, file=f)
print("sig: %d" % self.sig, file=f)
print("time: %.3f" % self.timeused, file=f)
print("rss: %d" % self.memrss, file=f)
print("data: %d" % self.memdata, file=f)
print("stack: %d" % self.memstack, file=f)
if __name__ == '__main__':
os.umask(0002)
os.umask(0o002)
RunGuard().run()