aboutsummaryrefslogtreecommitdiff
path: root/neb/std/sys.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/std/sys.py')
-rw-r--r--neb/std/sys.py35
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)]))