diff options
Diffstat (limited to 'neb/std/sys.py')
| -rw-r--r-- | neb/std/sys.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/neb/std/sys.py b/neb/std/sys.py new file mode 100644 index 0000000..252a0b0 --- /dev/null +++ b/neb/std/sys.py @@ -0,0 +1,35 @@ +from .. import TypeEnum, Environment, Arg, Builtin, evaluate +from ..structs import * +import shlex +import subprocess +import sys + +SYS = Environment() + +def interpretArgv(symbol, args, env, ns): + out = [] + for arg in sys.argv[1:]: + out.append(String(arg)) + return List(out) + +SYS.register("argv", Builtin(interpretArgv, [])) + +def interpretShell(symbol, args, env, ns): + ret = subprocess.run(shlex.split(args[0].value), capture_output=True) + return List([String(r) for r in ret.stdout.decode("utf-8").split("\n")]) + +SYS.register("$", Builtin(interpretShell, [Arg("command", TypeEnum.STRING)])) + +def interpretExit(symbol, args, env, ns): + status = 0 if len(args) == 0 else args[0].value + sys.exit(status) + return List([]) + +exit_arg = Arg("status", TypeEnum.INT, optional=True) +SYS.register("exit", Builtin(interpretExit, [exit_arg])) + +def interpretPrint(symbol, args, env, ns): + print(args[0].value) + return List([]) # print returns nothing + +SYS.register("print", Builtin(interpretPrint, [Arg("arg", TypeEnum.STRING)])) |
