Fixed timeout statuses not appearing.

- Also tidied up _do_command and _run_command.
This commit is contained in:
Andrew Hamilton 2018-05-25 10:53:06 +10:00
parent e4f7845b5d
commit 02844de562
2 changed files with 12 additions and 22 deletions

2
BUGS
View file

@ -1,5 +1,4 @@
Current Current
- Timeout statuses aren't appearing. Probably related to subprocess.run.
- Sometimes a paused worker has the running status (blue), when it should - Sometimes a paused worker has the running status (blue), when it should
have the paused status (yellow). have the paused status (yellow).
- If a job is paused for longer than the timeout period, sometimes it has - If a job is paused for longer than the timeout period, sometimes it has
@ -256,6 +255,7 @@ Fixed
- disassemble for python doesn't always work. - disassemble for python doesn't always work.
- The brightness of the summary's title slightly changes when focused. - The brightness of the summary's title slightly changes when focused.
<- Went away! <- Went away!
- Timeout statuses aren't appearing. Probably related to subprocess.run.
Won't fix Won't fix

View file

@ -107,32 +107,22 @@ def _fix_input(input_):
def _do_command(command, timeout=None, **kwargs): def _do_command(command, timeout=None, **kwargs):
stdout, stderr = "", "" process = subprocess.Popen(command, stdout=subprocess.PIPE,
with contextlib.suppress(subprocess.CalledProcessError): stderr=subprocess.PIPE, **kwargs)
try: try:
process = subprocess.run(command, stdout=subprocess.PIPE, stdout, stderr = process.communicate(timeout=timeout)
stderr=subprocess.PIPE, timeout=timeout,
**kwargs)
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired:
process.kill() process.kill()
raise raise
return (_fix_input(process.stdout), _fix_input(process.stderr), return _fix_input(stdout), _fix_input(stderr), process.returncode
process.returncode)
def _run_command(command, success_status=None, error_status=None): def _run_command(command, success_status=None, error_status=None):
success_status = Status.ok if success_status is None else success_status success_status = Status.ok if success_status is None else success_status
error_status = Status.problem if error_status is None else error_status error_status = Status.problem if error_status is None else error_status
status, output = success_status, "" stdout, stderr, returncode = _do_command(command)
try: result_status = success_status if returncode == 0 else error_status
process = subprocess.run(command, stdout=subprocess.PIPE, return result_status, fill3.Text(stdout + stderr)
stderr=subprocess.PIPE)
output = process.stdout + process.stderr
except subprocess.CalledProcessError:
status = error_status
if process.returncode != 0:
status = error_status
return status, fill3.Text(_fix_input(output))
def deps(**kwargs): def deps(**kwargs):