diff --git a/sim/run.py b/sim/run.py
index ada708f938e80267828fec741681cf22bdeee211..4ffe89eb3e653ec5e0e32213967eea809464a4fa 100644
--- a/sim/run.py
+++ b/sim/run.py
@@ -6,6 +6,7 @@ import importlib.util
 import os
 import sys
 import builtins
+import argparse
 
 
 projectpath = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
@@ -107,13 +108,22 @@ def _stat(path):
 
 os.stat = _stat
 
-if len(sys.argv) >= 2 and sys.argv[1] == "screenshot":
+
+def sim_main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--screenshot", action="store_true", default=False)
+    parser.add_argument("override_app", nargs="?")
+    args = parser.parse_args()
+
     import _sim
 
-    _sim.SCREENSHOT = True
-elif len(sys.argv) == 2:
-    import st3m.run
+    _sim.SCREENSHOT = args.screenshot
+
+    if args.override_app is not None:
+        st3m.run.override_main_app = args.override_app
+
+    import main
 
-    st3m.run.override_main_app = sys.argv[1]
 
-import main
+if __name__ == "__main__":
+    sim_main()