common.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:do-like-javac 作者: SRI-CSL 项目源码 文件源码
def run_cmd(cmd, args=None, tool=None):
  stats = {'timed_out': False,
           'output': ''}
  timer = None
  out = None
  out_file = None
  friendly_cmd = ' '.join(cmd)

  if args and args.verbose and args.log_to_stderr:
    out = sys.stderr
  elif tool:
    out_file = os.path.join(args.output_directory, tool + ".log")
    out = open(out_file, 'a')

  def output(line):
    if out:
      out.write(line)
      out.flush()

  def kill_proc(proc, stats):
    output("Timed out after {} seconds on {}\n".format(args.timeout, friendly_cmd))
    stats['timed_out'] = True
    proc.kill()

  output("Running {}\n\n".format(friendly_cmd))

  try:
    start_time = timeit.default_timer()
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    if args and args.timeout:
      timer = Timer(args.timeout, kill_proc, [process, stats])
      timer.start()

    for line in iter(process.stdout.readline, b''):
      stats['output'] = stats['output'] + line
      output(line)

    process.stdout.close()
    process.wait()
    stats['time'] = timeit.default_timer() - start_time
    stats['return_code'] = process.returncode
    if timer:
      timer.cancel()

  except:
    output('calling {cmd} failed\n{trace}\n'.format(cmd=friendly_cmd,trace=traceback.format_exc()))

  if out_file:
    out.close()

  return stats
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号