55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/python2
 | |
| 
 | |
| 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', buffering=2)
 | |
| stderr = open(os.path.join(logdir, 'stderr'), 'a', buffering=2)
 | |
| 
 | |
| # 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'), 'wb', buffering=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
 | |
| # close_fds must be False to support python 2 and 3. In 3 the default changes
 | |
| # to True, and will break fd writing used elsewhere (e.g. harness_autoserv)
 | |
| exit_code = subprocess.call("{} {}".format(sys.executable, cmd),
 | |
|                             shell=True,
 | |
|                             close_fds=False)
 | |
| exit_file.write('%+04d' % exit_code)
 | |
| exit_file.flush()
 | |
| fcntl.flock(exit_file, fcntl.LOCK_UN)
 | |
| exit_file.close()
 |