Skip to content

Commit f0c570d

Browse files
authored
Merge pull request #960 from cathales/fixes
Fix Ctrl-C processing & use as lib with recent python versions
2 parents f01f628 + 41284d6 commit f0c570d

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

Diff for: __init__.py

Whitespace-only changes.

Diff for: scripts/lib.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ def run_cmd(cmd, timeout_s=999, exit_on_error=1, check_return_code=True,
103103
debug_cmd.write(cmd)
104104
debug_cmd.write("\n\n")
105105
return
106+
def killgroup(ps):
107+
try:
108+
os.killpg(os.getpgid(ps.pid), signal.SIGTERM)
109+
except AttributeError: #killpg not available on windows
110+
ps.kill()
111+
sys.exit(130)
106112
try:
107113
ps = subprocess.Popen("exec " + cmd,
108114
shell=True,
@@ -112,21 +118,17 @@ def run_cmd(cmd, timeout_s=999, exit_on_error=1, check_return_code=True,
112118
env=os.environ,
113119
stdout=subprocess.PIPE,
114120
stderr=subprocess.STDOUT)
121+
output = ps.communicate(timeout = timeout_s)[0]
115122
except subprocess.CalledProcessError:
116123
logging.error(ps.communicate()[0])
117124
sys.exit(RET_FAIL)
118125
except KeyboardInterrupt:
119126
logging.info("\nExited Ctrl-C from user request.")
120-
sys.exit(130)
121-
try:
122-
output = ps.communicate(timeout=timeout_s)[0]
127+
killgroup(ps)
123128
except subprocess.TimeoutExpired:
124129
logging.error("Timeout[{}s]: {}".format(timeout_s, cmd))
125130
output = ""
126-
try:
127-
os.killpg(os.getpgid(ps.pid), signal.SIGTERM)
128-
except AttributeError: #killpg not available on windows
129-
ps.kill()
131+
killgroup(ps)
130132
rc = ps.returncode
131133
if rc and check_return_code and rc > 0:
132134
logging.info(output)

0 commit comments

Comments
 (0)