2015-02-05 3 views
16

another question here에서 영감을 얻어 파이썬 인터프리터의 전체 명령 줄을 이식 가능한 방식으로 검색하고 싶습니다. 즉, 원래 argv의 통역사를 얻고 싶습니다. sys.argv은 통역사에게 옵션을 제외합니다 (예 : -m, -O 등).파이썬 인터프리터의 명령 줄 인수를 가져옵니다.

sys.flags은 어떤 부울 옵션이 설정되었는지 알려주지 만 -m 개의 인수에 대해 알려주지 않으며 시간 경과에 따라 플래그 집합이 바뀌어 유지 관리 부담이 발생합니다.

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

을 사용할 수 있습니다 : 당신이 원래의 명령 행을 검색 할 procfs의를 사용할 수 있지만,이 이식 할 수 없습니다 (그리고 종류의 총의) 리눅스

위대한 질문 ... 내가 알 수있는 한, 이것은 불가능합니다 (CPython에서). [Py_Main] (https://hg.python.org/cpython/file/2bb5fa752bfc/Modules/main.c#l236)이 명령 줄 인수를 얻기 위해 구문 분석을 한 다음 [PySys_SetArgv] (https : //hg.python.org/cpython/file/2bb5fa752bfc/Modules/main.c#l571)을 나머지 인수와 함께 사용하고'* argc' 및'** argv'를 사용하지 않습니다. 아마도 [Py_GetArgcArgv] (https://hg.python.org/cpython/file/2bb5fa752bfc/Modules/main.c#l691)가있을 수 있습니다.하지만 문서화 된 곳 어디에도 보이지 않습니다. C-API ... – mgilson

+1

'.split ('\ 0')'.replace ('\ 0', '')'보다 정확합니다. 그렇지 않으면 공백을 포함하는 인수와 별도의 인수를 구별 할 수 없습니다. – tripleee

답변

10

이가있다하는 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' 
관련 문제