개발/Python

python subprocess run이 안끝난다면?

팥빙구 2019. 2. 1. 22:01

subprocess.run을 timeout 옵션을 주어 돌렸는데도 끝나지 않는다면

The timeout argument is passed to Popen.communicate(). If the timeout expires, the child process will be killed and waited for. The TimeoutExpired exception will be re-raised after the child process has terminated.


요거 때문에 그렇다. child process들이 끝날때까지 다 기다리느라구 안끝나는거임.. 그럴때는 그냥

popen으로 proc 생성하고 communicate에 timeout 줘서 돌린담에 TimeoutExpired 에러 났을때 proc.kill() 하면댐


예를 들어

def run_command(command, timeout=100):

try:

proc = subprocess.Popen(shlex.split(command), stdout=PIPE, stderr=PIPE)

return proc.communicate(timeout=timeout)

except subprocess.TimeoutExpired:

proc.kill()

return None

요런식으루.. 구냥 지금 쓴 코드고 안돌려봐서 오타가 있을지두 모르지만

무튼 이러면 프로세스 아가들도 확실히 죽여줄수가 잇당


갠적으루 run 옵션에 kill_childs 옵션이 있음 좋겟당