동시에 두 개의 하위 프로세스를 실행하고 두 프로세스의 출력을 단일 로그 파일에 저장합니다. 또한 걸린 서브 프로세스를 처리하기위한 타임 아웃을 구축했습니다. 출력이 너무 커지면 시간 초과가 항상 트리거되고 하위 프로세스의 stdout은 로그 파일에 저장되지 않습니다. 위의 Alex에 의해 제기 된 대답은 그것을 해결하지 못합니다.
# Currently open log file.
log = None
# If we send stdout to subprocess.PIPE, the tests with lots of output fill up the pipe and
# make the script hang. So, write the subprocess's stdout directly to the log file.
def run(cmd, logfile):
#print os.getcwd()
#print ("Running test: %s" % cmd)
global log
p = subprocess.Popen(cmd, shell=True, universal_newlines = True, stderr=subprocess.STDOUT, stdout=logfile)
log = logfile
return p
# To make a subprocess capable of timing out
class Alarm(Exception):
pass
def alarm_handler(signum, frame):
log.flush()
raise Alarm
####
## This function runs a given command with the given flags, and records the
## results in a log file.
####
def runTest(cmd_path, flags, name):
log = open(name, 'w')
print >> log, "header"
log.flush()
cmd1_ret = run(cmd_path + "command1 " + flags, log)
log.flush()
cmd2_ret = run(cmd_path + "command2", log)
#log.flush()
sys.stdout.flush()
start_timer = time.time() # time how long this took to finish
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(5) #seconds
try:
cmd1_ret.communicate()
except Alarm:
print "myScript.py: Oops, taking too long!"
kill_string = ("kill -9 %d" % cmd1_ret.pid)
os.system(kill_string)
kill_string = ("kill -9 %d" % cmd2_ret.pid)
os.system(kill_string)
#sys.exit()
end_timer = time.time()
print >> log, "closing message"
log.close()
감사합니다. 나는 전에 그것을 시도하고 오류가 있다는 것을 맹세 할 수 있었지만 그것은 정확하게 내가 기대했던 것입니다. –
그건 나를 위해 작동하지 않습니다. 두 프로세스를 동시에 실행하고 stdout과 stderr를 둘 다 하나의 로그 파일로 저장합니다. 출력이 너무 커지면 하위 프로세스 중 하나가 중단됩니다. 어느 쪽인지 모르겠다. 코멘트에 서식을 사용할 수 없으므로 아래에 "답변"을 추가하겠습니다. – jasper77