Update scripts to allow vtr test .. -v3 to show tool logs in case of error
diff --git a/vtr_flow/scripts/python_libs/verilogtorouting/util.py b/vtr_flow/scripts/python_libs/verilogtorouting/util.py index fae2a38..a7ac559 100644 --- a/vtr_flow/scripts/python_libs/verilogtorouting/util.py +++ b/vtr_flow/scripts/python_libs/verilogtorouting/util.py
@@ -21,7 +21,7 @@ class CommandRunner(object): - def __init__(self, timeout_sec=None, max_memory_mb=None, track_memory=True, verbose=False, echo_cmd=False, indent="\t"): + def __init__(self, timeout_sec=None, max_memory_mb=None, track_memory=True, verbose_error=False, verbose=False, echo_cmd=False, indent="\t"): """ An object for running system commands with timeouts, memory limits and varying verbose-ness @@ -30,6 +30,7 @@ timeout_sec: maximum walk-clock-time of the command in seconds. Default: None max_memory_mb: maximum memory usage of the command in megabytes (if supported). Default: None track_memory: Whether to track usage of the command (disabled if not supported). Default: True + verbose_error: Produce more verbose output if the commadn fails. Default: False verbose: Produce more verbose output. Default: False echo_cmd: Echo the command before running. Default: False indent: The string specifying a single indent (used in verbose mode) @@ -37,11 +38,12 @@ self._timeout_sec = timeout_sec self._max_memory_mb = max_memory_mb self._track_memory = track_memory + self._verbose_error = verbose_error self._verbose = verbose self._echo_cmd = echo_cmd self._indent = indent - def run_system_command(self, cmd, work_dir, log_filename=None, exepcted_return_code=0, indent_depth=0): + def run_system_command(self, cmd, work_dir, log_filename=None, expected_return_code=0, indent_depth=0): """ Runs the specified command in the system shell. @@ -117,10 +119,6 @@ #Save the output cmd_output.append(line) - #Send to stdout - if self._verbose: - print indent_depth*self._indent + line, - #Abort if over time limit elapsed_time = time.time() - start_time if self._timeout_sec and elapsed_time > self._timeout_sec: @@ -139,7 +137,15 @@ cmd_returncode = proc.returncode - if cmd_returncode != exepcted_return_code: + cmd_errored = (cmd_returncode != expected_return_code) + + #Send to stdout + if self._verbose or (cmd_errored and self._verbose_error): + for line in cmd_output: + print indent_depth*self._indent + line, + + + if cmd_errored: raise CommandError(msg="Executable {exec_name} failed".format(exec_name=os.path.basename(orig_cmd[0])), cmd=cmd, log=os.path.join(work_dir, log_filename),
diff --git a/vtr_flow/scripts/vtr-flow.py b/vtr_flow/scripts/vtr-flow.py index 708faf3..dc0bbd6 100755 --- a/vtr_flow/scripts/vtr-flow.py +++ b/vtr_flow/scripts/vtr-flow.py
@@ -197,7 +197,8 @@ command_runner = CommandRunner(track_memory=args.track_memory_usage, max_memory_mb=args.memory_limit, timeout_sec=args.timeout, - verbose=True if args.verbosity >= 2 else False, + verbose_error=True if args.verbosity == 2 else False, + verbose=True if args.verbosity > 2 else False, echo_cmd=True if args.verbosity >= 4 else False) exit_status = 0 try: @@ -247,7 +248,7 @@ exit_status = 2 finally: - print_verbose(BASIC_VERBOSITY, args.verbosity, "\n{} took {}".format(prog, format_elapsed_time(datetime.now() - start))) + print_verbose(BASIC_VERBOSITY, args.verbosity, "\n# {} took {} (exiting {})".format(prog, format_elapsed_time(datetime.now() - start), exit_status)) sys.exit(exit_status) def process_unkown_args(unkown_args):
diff --git a/vtr_flow/scripts/vtr-task.py b/vtr_flow/scripts/vtr-task.py index ca88242..1df01ad 100755 --- a/vtr_flow/scripts/vtr-task.py +++ b/vtr_flow/scripts/vtr-task.py
@@ -198,7 +198,7 @@ print "Error:", e.msg finally: if args.print_metadata: - print "\n{} took {} (exiting {})".format(prog, format_elapsed_time(datetime.now() - start), num_failed) + print "\n# {} took {} (exiting {})".format(prog, format_elapsed_time(datetime.now() - start), num_failed) sys.exit(num_failed) def run_tasks(args, configs): @@ -258,7 +258,7 @@ #Re-run parsing only cmd = job.command() cmd += ['--parse'] - cmd += ['-v', str(max(0, args.verbosity-2))] + cmd += ['-v', str(max(0, args.verbosity-3))] subprocess.check_call(cmd, cwd=job.work_dir(run_dir)) if task_metrics_filepath is None: @@ -414,7 +414,7 @@ reason = e.msg if not metric_passed: - print_verbose(BASIC_VERBOSITY, args.verbosity, " FAILED {} {}/{}: {} {}".format(config.task_name, arch, circuit, metric, reason)) + print_verbose(BASIC_VERBOSITY, args.verbosity, " FAILED {} {} {}/{}: {} {}".format(os.path.basename(run_dir), config.task_name, arch, circuit, metric, reason)) num_qor_failures += 1 if num_qor_failures == 0:
diff --git a/vtr_flow/scripts/vtr-test.py b/vtr_flow/scripts/vtr-test.py index 8c0a59a..0a0748e 100755 --- a/vtr_flow/scripts/vtr-test.py +++ b/vtr_flow/scripts/vtr-test.py
@@ -71,7 +71,7 @@ help="How many processors to use for execution.") parser.add_argument("-v", "--verbosity", - choices=VERBOSITY_CHOICES, + choices=VERBOSITY_CHOICES + [5], default=2, type=int, help="Sets the verbosity of the script. Higher values produce more output.") @@ -142,7 +142,7 @@ sys.exit(num_func_failures + num_qor_failures) finally: - print_verbose(BASIC_VERBOSITY, args.verbosity, "\n{} took {}".format(prog, format_elapsed_time(datetime.now() - start))) + print_verbose(BASIC_VERBOSITY, args.verbosity, "\n# {} took {} (exiting {})".format(prog, format_elapsed_time(datetime.now() - start), num_func_failures + num_qor_failures)) def run_odin_test(args, test_name): odin_reg_script = None