aboutsummaryrefslogtreecommitdiff
path: root/tools/jsrun.py
blob: 571e9cee188e250538909172358109b74a4232c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import time
from subprocess import Popen, PIPE, STDOUT

def timeout_run(proc, timeout, note='unnamed process', full_output=False):
  start = time.time()
  if timeout is not None:
    while time.time() - start < timeout and proc.poll() is None:
      time.sleep(0.1)
    if proc.poll() is None:
      proc.kill() # XXX bug: killing emscripten.py does not kill it's child process!
      raise Exception("Timed out: " + note)
  out = proc.communicate()
  return '\n'.join(out) if full_output else out[0]

def run_js(filename, engine=None, args=[], check_timeout=False, stdout=PIPE, stderr=None, cwd=None, full_output=False):
  if type(engine) is not list:
    engine = [engine]
  command = engine + [filename] + (['--'] if 'd8' in engine[0] or 'jsc' in engine[0] else []) + args
  return timeout_run(
    Popen(
      command,
      stdout=stdout,
      stderr=stderr,
      cwd=cwd),
    15*60 if check_timeout else None,
    'Execution',
    full_output=full_output)