Python3 - Kill processes in subprocess timeouts #1807

This commit is contained in:
Thomas Nagy 2016-08-25 07:48:14 +02:00
parent f7367c8051
commit fdc3b47067
No known key found for this signature in database
GPG Key ID: 49B4C67C05277AAA
2 changed files with 27 additions and 3 deletions

View File

@ -24,6 +24,12 @@ if os.name == 'posix' and sys.version_info[0] < 3:
else:
import subprocess
try:
TimeoutExpired = subprocess.TimeoutExpired
except AttributeError:
class TimeoutExpired(object):
pass
from collections import deque, defaultdict
try:
@ -856,11 +862,19 @@ def run_regular_process(cmd, kwargs, cargs={}):
"""
proc = subprocess.Popen(cmd, **kwargs)
if kwargs.get('stdout') or kwargs.get('stderr'):
out, err = proc.communicate(**cargs)
try:
out, err = proc.communicate(**cargs)
except TimeoutExpired:
proc.kill()
out, err = proc.communicate(**cargs)
status = proc.returncode
else:
out, err = (None, None)
status = proc.wait(**cargs)
try:
status = proc.wait(**cargs)
except TimeoutExpired:
proc.kill()
status = proc.wait(**cargs)
return status, out, err
def run_process(cmd, kwargs, cargs={}):

View File

@ -13,6 +13,12 @@ try:
except ImportError:
import subprocess
try:
TimeoutExpired = subprocess.TimeoutExpired
except AttributeError:
class TimeoutExpired(object):
pass
def run():
txt = sys.stdin.readline().strip()
if not txt:
@ -25,7 +31,11 @@ def run():
out, err, ex, trace = (None, None, None, None)
try:
proc = subprocess.Popen(cmd, **kwargs)
out, err = proc.communicate(**cargs)
try:
out, err = proc.communicate(**cargs)
except TimeoutExpired:
proc.kill()
out, err = proc.communicate(**cargs)
ret = proc.returncode
except (OSError, ValueError, Exception) as e:
exc_type, exc_value, tb = sys.exc_info()