Получить аргументы командной строки интерпретатора Python

Вдохновленный другим вопросом здесь, я хотел бы получить полную командную строку интерпретатора Python портативным способом. То есть, я хочу получить исходный argv интерпретатора, а не sys.argv, который исключает параметры самого интерпретатора (например, -m, -O и т.д.).

sys.flags сообщает нам, какие логические опции были установлены, но он не говорит нам о аргументах -m, а набор флагов будет меняться со временем, создавая нагрузку на обслуживание.

В Linux вы можете использовать procfs для извлечения исходной командной строки, но это не переносимо (и это грубо):

open('/proc/{}/cmdline'.format(os.getpid())).read().split('\0')

Ответы

Ответ 1

Вы можете использовать ctypes

~$ python2 -B -R -u
Python 2.7.9 (default, Dec 11 2014, 04:42:00) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Persistent session history and tab completion are enabled.
>>> import ctypes
>>> argv = ctypes.POINTER(ctypes.c_char_p)()
>>> argc = ctypes.c_int()
>>> ctypes.pythonapi.Py_GetArgcArgv(ctypes.byref(argc), ctypes.byref(argv))
1227013240
>>> argc.value
4
>>> argv[0]
'python2'
>>> argv[1]
'-B'
>>> argv[2]
'-R'
>>> argv[3]
'-u'