Mercurial > ~astiob > upreckon > hgweb
comparison test-svn.py @ 15:c0e925ae721e
Flush stdout during update; initial work on memory usage control
author | Oleg Oshmyan <chortos@inbox.lv> |
---|---|
date | Tue, 01 Jun 2010 21:57:05 +0000 |
parents | 28b1f4853968 |
children | d4fc9341664e |
comparison
equal
deleted
inserted
replaced
14:28b1f4853968 | 15:c0e925ae721e |
---|---|
12 parser.add_option('-s', '--save-io', dest='erase', action='store_false', default=True, help='do not delete the copies of input/output files after the last test case; create copies of input files and store output in files even if the solution uses standard I/O; delete the stored input/output files if the solution uses standard I/O and the -c/--cleanup option is specified') | 12 parser.add_option('-s', '--save-io', dest='erase', action='store_false', default=True, help='do not delete the copies of input/output files after the last test case; create copies of input files and store output in files even if the solution uses standard I/O; delete the stored input/output files if the solution uses standard I/O and the -c/--cleanup option is specified') |
13 parser.add_option('-m', '--copy-io', dest='copyonly', action='store_true', default=False, help='only create a copy of the input/output files of the last test case for manual testing; to delete them, use options -cs or -cm') | 13 parser.add_option('-m', '--copy-io', dest='copyonly', action='store_true', default=False, help='only create a copy of the input/output files of the last test case for manual testing; to delete them, use options -cs or -cm') |
14 parser.add_option('-x', '--auto-exit', dest='pause', action='store_false', default=True, help='do not wait for a key to be pressed when finished testing') | 14 parser.add_option('-x', '--auto-exit', dest='pause', action='store_false', default=True, help='do not wait for a key to be pressed when finished testing') |
15 parser.add_option('-p', '--python', action='store_true', default=False, help='always parse all positional arguments as a single Python expression (including the first argument even if it names an executable file)') | 15 parser.add_option('-p', '--python', action='store_true', default=False, help='always parse all positional arguments as a single Python expression (including the first argument even if it names an executable file)') |
16 parser.add_option('-t', '--detect-time', dest='autotime', action='store_true', default=False, help='spend a second detecting the most precise time measurement function') | 16 parser.add_option('-t', '--detect-time', dest='autotime', action='store_true', default=False, help='spend a second detecting the most precise time measurement function') |
17 parser.add_option('-b', dest='builtin', action='store_true', default=False) | |
17 | 18 |
18 options, args = parser.parse_args() | 19 options, args = parser.parse_args() |
19 parser.destroy() | 20 parser.destroy() |
20 del parser | 21 del parser |
22 | |
23 if options.builtin: | |
24 try: | |
25 if args[0] == 'run': | |
26 import resource | |
27 maxmemory = int(args[1]) | |
28 resource.setrlimit(resource.RLIMIT_AS, (maxmemory*1024**2, maxmemory*1024**2)) | |
29 os.execv(args[2], args[2:]) | |
30 else: | |
31 sys.exit(2) | |
32 except: | |
33 sys.exit(2) | |
21 | 34 |
22 def update(): | 35 def update(): |
23 import urllib | 36 import urllib |
24 latesttext = urllib.urlopen('http://chortos.selfip.net/~astiob/test.py/version.txt').read() | 37 latesttext = urllib.urlopen('http://chortos.selfip.net/~astiob/test.py/version.txt').read() |
25 latest = latesttext.split('.') | 38 latest = latesttext.split('.') |
38 return | 51 return |
39 if update == '': | 52 if update == '': |
40 print 'Your copy of test.py is newer than the publicly available version.' | 53 print 'Your copy of test.py is newer than the publicly available version.' |
41 return | 54 return |
42 print 'A ' + update + ' update to test.py is available. Downloading...' | 55 print 'A ' + update + ' update to test.py is available. Downloading...' |
56 sys.stdout.flush() | |
43 urllib.urlretrieve('http://chortos.selfip.net/~astiob/test.py/test.py', 'test.py') | 57 urllib.urlretrieve('http://chortos.selfip.net/~astiob/test.py/test.py', 'test.py') |
44 print 'Downloaded and installed. Now you are using test.py ' + latesttext + '.' | 58 print 'Downloaded and installed. Now you are using test.py ' + latesttext + '.' |
45 | 59 |
46 if options.update: | 60 if options.update: |
47 update() | 61 update() |
48 sys.exit() | 62 sys.exit() |
63 | |
64 try: | |
65 import resource | |
66 memlimit = True | |
67 def call(name): | |
68 pid = os.fork() | |
69 if not pid: | |
70 resource.setrlimit(resource.RLIMIT_AS, (maxmemory*1024**2, maxmemory*1024**2)) | |
71 os.execl(name) | |
72 else: | |
73 return pid | |
74 except ImportError: | |
75 memlimit = False | |
49 | 76 |
50 globals1 = set(globals()) | 77 globals1 = set(globals()) |
51 | 78 |
52 # Initialize some configuration variables with default values | 79 # Initialize some configuration variables with default values |
53 tasknames = (os.path.curdir,) | 80 tasknames = (os.path.curdir,) |