Add terminate process and rmtree utilities

This commit is contained in:
allegroai 2020-07-11 01:40:50 +03:00
parent f8ea445339
commit c6d998c4df
2 changed files with 42 additions and 1 deletions

View File

@ -173,13 +173,30 @@ def normalize_path(*paths):
def safe_remove_file(filename, error_message=None): def safe_remove_file(filename, error_message=None):
# noinspection PyBroadException
try: try:
os.remove(filename) if filename:
os.remove(filename)
except Exception: except Exception:
if error_message: if error_message:
print(error_message) print(error_message)
def safe_remove_tree(filename):
if not filename:
return
# noinspection PyBroadException
try:
shutil.rmtree(filename, ignore_errors=True)
except Exception:
pass
# noinspection PyBroadException
try:
os.remove(filename)
except Exception:
pass
def get_python_path(script_dir, entry_point, package_api): def get_python_path(script_dir, entry_point, package_api):
try: try:
python_path_sep = ';' if is_windows_platform() else ':' python_path_sep = ';' if is_windows_platform() else ':'

View File

@ -11,6 +11,7 @@ from copy import deepcopy
from distutils.spawn import find_executable from distutils.spawn import find_executable
from itertools import chain, repeat, islice from itertools import chain, repeat, islice
from os.path import devnull from os.path import devnull
from time import sleep
from typing import Union, Text, Sequence, Any, TypeVar, Callable from typing import Union, Text, Sequence, Any, TypeVar, Callable
import psutil import psutil
@ -41,6 +42,29 @@ def get_bash_output(cmd, strip=False, stderr=subprocess.STDOUT, stdin=False):
return output if not strip or not output else output.strip() return output if not strip or not output else output.strip()
def terminate_process(pid, timeout=10.):
# noinspection PyBroadException
try:
proc = psutil.Process(pid)
proc.terminate()
cnt = 0
while proc.is_running() and cnt < timeout:
sleep(1.)
cnt += 1
proc.terminate()
cnt = 0
while proc.is_running() and cnt < timeout:
sleep(1.)
cnt += 1
proc.kill()
except Exception:
pass
# noinspection PyBroadException
try:
return not psutil.Process(pid).is_running()
except Exception:
return True
def kill_all_child_processes(pid=None): def kill_all_child_processes(pid=None):
# get current process if pid not provided # get current process if pid not provided
include_parent = True include_parent = True