Получить аргументы командной строки интерпретатора 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'