diff options
| -rw-r--r-- | std.py | 22 |
1 files changed, 11 insertions, 11 deletions
@@ -23,12 +23,13 @@ def std_print(arg): return NebNil() def std_print_all(arg): - for idx, item in enumerate(arg.items): + items = arg.items + for idx, item in enumerate(items): if isinstance(item, NebExpression): - arg.items[idx] = evaluate_expression(item) + items[idx] = evaluate_expression(item) elif not isinstance(item, NebString): raise exception("print-all needs all strings!") - for x in arg.items: + for x in items: std_print(x) return NebNil() @@ -153,9 +154,9 @@ def std_literal_to_string(arg): def std_shell(arg): assert isinstance(arg, NebString) lst = arg.value.split(" ") - ret = subprocess.run(lst, capture_output=True) + ret = subprocess.run(lst, capture_output=True, check=True) stdout_as_list = ret.stdout.decode("utf-8").split("\n")[:-1] - return NebList([ret.returncode] + stdout_as_list) + return NebList(list(NebString(x) for x in stdout_as_list)) def std_shell_pipe(args): prev = None @@ -166,20 +167,19 @@ def std_shell_pipe(args): lst = arg.value.split(" ") if prev is None: if stdout is None: - ret = subprocess.run(lst, capture_output=True) + ret = subprocess.run(lst, capture_output=True, check=True) else: - ret = subprocess.run(lst, stdout=stdout) + ret = subprocess.run(lst, stdout=stdout, check=True) else: if stdout is None: - ret = subprocess.run(lst, input=prev.stdout, capture_output=True) + ret = subprocess.run(lst, input=prev.stdout, capture_output=True, check=True) else: - ret = subprocess.run(lst, stdout=stdout, input=prev.stdout) + ret = subprocess.run(lst, stdout=stdout, input=prev.stdout, check=True) - # TODO should we bail here if the return code is non-zero? prev = ret stdout_as_list = prev.stdout.decode("utf-8").split("\n")[:-1] - return NebList([prev.returncode] + stdout_as_list) + return NebList(list(NebString(x) for x in stdout_as_list)) def evaluate_expression(expr): if not expr.symbol.name in STD: |
