| #!/usr/bin/python |
| |
| import common |
| import sys, os, subprocess, fcntl |
| |
| |
| bindir = os.path.dirname(__file__) |
| autotest = os.path.join(bindir, 'autotest') |
| |
| logdir = sys.argv[1] |
| |
| |
| # We want to simulate the behaviour of autotest_client, where fd3 would be |
| # routed to stderr and fd1 & fd2 to stdout |
| |
| # HACK: grab fd3 for now |
| os.dup2(2, 3) |
| |
| # open up log files to use for std* |
| stdout = open(os.path.join(logdir, 'stdout'), 'a', 0) |
| stderr = open(os.path.join(logdir, 'stderr'), 'a', 0) |
| |
| # set up the file descriptors now, simulating the old behaviour |
| os.dup2(stdout.fileno(), 1) |
| os.dup2(stdout.fileno(), 2) |
| os.dup2(stderr.fileno(), 3) |
| |
| # we don't need the file objects any more |
| stdout.close() |
| stderr.close() |
| |
| |
| args = [autotest] + sys.argv[2:] |
| if '-H' not in args: |
| args[1:1] = ['-H', 'autoserv'] |
| cmd = ' '.join(args) |
| |
| # open up a log file for saving off the exit code |
| exit_file = open(os.path.join(logdir, 'exit_code'), 'w', 0) |
| fcntl.flock(exit_file, fcntl.LOCK_EX) |
| |
| # touch a 'started' file to indicate we've been initialized |
| open(os.path.join(logdir, 'started'), 'w').close() |
| |
| # run the actual autotest client and write the exit code into the log file |
| exit_code = subprocess.call(cmd, shell=True) |
| exit_file.write('%+04d' % exit_code) |
| exit_file.flush() |
| fcntl.flock(exit_file, fcntl.LOCK_UN) |
| exit_file.close() |