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>
This commit is contained in:
Jim Mussared 2022-10-07 02:13:58 +11:00 committed by Damien George
parent c44b3927b8
commit 0e8dfaf538
2 changed files with 17 additions and 0 deletions

View File

@ -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
*/

View File

@ -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)