내 파이썬 코드를 파이썬에서 함수 호출을 종료하는 것은 다음과 같이 진행됩니다 등등n 초 후
def a():
...
...
subprocess.call()
...
...
def b():
...
...
하고 있습니다.
내 작업 :
1) 3 초 내에 subprocess.call()
반환, 내 실행이 순간을 subprocess.call()
수익을 계속해야합니다.
2) subprocess.call()
이 3 초 이내에 반환되지 않으면 subprocess.call()
을 종료해야하고 3 초 후에 실행을 계속해야합니다.
3) subprocess.call()
이 반환되거나 3 초가 끝날 때까지 추가 실행이 발생하지 않아야합니다.
이것은 스레드로 수행 할 수 있지만 어떻게 수행 할 수 있습니까? 실제 코드의
관련 부분은 다음과 같이 진행됩니다
...
cmd = ["gcc", "-O2", srcname, "-o", execname];
p = subprocess.Popen(cmd,stderr=errfile)//compiling C program
...
...
inputfile=open(input,'w')
inputfile.write(scanf_elements)
inputfile.close()
inputfile=open(input,'r')
tempfile=open(temp,'w')
subprocess.call(["./"+execname,str(commandline_argument)],stdin=inputfile,stdout=tempfile); //executing C program
tempfile.close()
inputfile.close()
...
...
내가 컴파일하고 파이썬을 사용하여 C 프로그램을 실행하려합니다. subprocess.call()을 사용하여 C 프로그램을 실행할 때 C 프로그램에 무한 루프가 포함되어 있다고 가정하면 subprocess.call()은 3 초 후에 종료되어야하고 프로그램은 계속 진행되어야합니다. subprocess.call()이 강제 종료되었거나 성공적으로 실행 되었기 때문에 다음 코드에서 메시지를 적절하게 인쇄 할 수 있는지 여부를 알 수 있어야합니다.
백엔드 gcc는 Linux 용입니다. 당신이 call
(당신이 gcc
를 실행하는 동일한 방식) 대신 Popen
생성자에 전화를 변환하고자하는 경우
수
는여기에 휴대용
threading.Timer()
기반 솔루션입니다 [타임 아웃이있는 서브 프로세스]의 복제본 (http : // st ackoverflow.com/questions/1191374/subprocess-with-timeout) – jfs관련 : [중단없이 파이썬에서 프로세스 출력 읽기를 중지 하시겠습니까?] (http://stackoverflow.com/a/4418891/4279) – jfs