summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2022-10-07 02:13:58 +1100
committerDamien George <damien@micropython.org>2022-10-11 18:10:26 +1100
commit0e8dfaf5384c672fc61bc10926688809db2b2ab2 (patch)
treea13818c29b0d0be4f7a5a7ba749892dbeffa95c7 /py
parentc44b3927b8f464e1e01c07b2431e7db251e6d8c0 (diff)
py/modsys: Add support for sys.executable.
Only intended to be used on Unix and other "OS" ports. Matches CPython. This should give the absolute path to the executing binary. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com> Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py')
-rw-r--r--py/modsys.c10
-rw-r--r--py/mpconfig.h7
2 files changed, 17 insertions, 0 deletions
diff --git a/py/modsys.c b/py/modsys.c
index 56e83029c..35af761a0 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -115,6 +115,12 @@ STATIC const mp_rom_obj_tuple_t mp_sys_implementation_obj = {
STATIC const MP_DEFINE_STR_OBJ(mp_sys_platform_obj, MICROPY_PY_SYS_PLATFORM);
#endif
+#ifdef MICROPY_PY_SYS_EXECUTABLE
+// executable - the path to the micropython binary
+// This object is non-const and is populated at startup in main()
+MP_DEFINE_STR_OBJ(mp_sys_executable_obj, "");
+#endif
+
// exit([retval]): raise SystemExit, with optional argument given to the exception
STATIC mp_obj_t mp_sys_exit(size_t n_args, const mp_obj_t *args) {
if (n_args == 0) {
@@ -262,6 +268,10 @@ STATIC const mp_rom_map_elem_t mp_module_sys_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_getsizeof), MP_ROM_PTR(&mp_sys_getsizeof_obj) },
#endif
+ #if MICROPY_PY_SYS_EXECUTABLE
+ { MP_ROM_QSTR(MP_QSTR_executable), MP_ROM_PTR(&mp_sys_executable_obj) },
+ #endif
+
/*
* Extensions to CPython
*/
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 698d264d2..99fa87e5c 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -1372,6 +1372,13 @@ typedef double mp_float_t;
#define MICROPY_PY_SYS_EXC_INFO (0)
#endif
+// Whether to provide "sys.executable", which is the absolute path to the
+// micropython binary
+// Intended for use on the "OS" ports (e.g. Unix)
+#ifndef MICROPY_PY_SYS_EXECUTABLE
+#define MICROPY_PY_SYS_EXECUTABLE (0)
+#endif
+
// Whether to provide "sys.exit" function
#ifndef MICROPY_PY_SYS_EXIT
#define MICROPY_PY_SYS_EXIT (1)