[python] Python에서 현재 스크립트 이름 가져 오기

현재 실행중인 Python 스크립트의 이름을 얻으려고합니다.

스크립트 foo.py가 있는데 스크립트 이름을 얻기 위해 이와 같은 작업을 수행하고 싶습니다.

print Scriptname



답변

__file__현재 파일의 이름을 얻는 데 사용할 수 있습니다 . 기본 모듈에서 사용될 때 이것은 원래 호출 된 스크립트의 이름입니다.

존재하는 디렉토리 부분을 생략하려면을 사용할 수 있습니다 os.path.basename(__file__).


답변

import sys
print sys.argv[0]

foo.pyfor python foo.py, dir/foo.pyfor python dir/foo.py등 을 인쇄 합니다 python. 첫 번째 인수 입니다. (py2exe 후에는입니다 foo.exe.)


답변

완전성을 기하기 위해, 나는 다양한 가능한 결과를 요약하고 각각의 정확한 행동에 대한 참조를 제공하는 것이 가치가 있다고 생각했습니다.

  • __file__공식 문서에 설명 된대로 현재 실행중인 파일입니다 .

    __file__파일에서로드 된 경우 모듈이로드 된 파일의 경로 이름입니다. __file__특성 등의 모듈, 특정 유형의 누락 될 수 C의 정적 인터프리터에 연결된 모듈; 공유 라이브러리에서 동적으로로드 된 확장 모듈의 경우 공유 라이브러리 파일의 경로 이름입니다.

    Python3.4에서 이후, 당 문제 18416 , __file__현재 실행 파일 (안와 인터프리터를 통해 직접 실행 된 스크립트가 아닌, 항상 절대 경로 -m상대 경로를 사용하여 명령 행 옵션).

  • __main__.__file__(가져 오기가 필요함 __main__) 단순히 메인 모듈 의 앞서 언급 한 __file__속성 , 예를 들어 명령 줄에서 호출 된 스크립트에 액세스합니다 .

  • sys.argv[0](가져 오기 필요 sys)는 명령 행에서 호출 된 스크립트 이름이며 공식 문서에 설명 된대로 절대 경로 일 수 있습니다 .

    argv[0]스크립트 이름입니다 (전체 경로 이름인지 여부에 따라 운영 체제에 따라 다름). -c인터프리터에 명령 행 옵션을 사용하여 명령이 실행 된 argv[0]경우 문자열로 설정됩니다 '-c'. Python 인터프리터에 스크립트 이름이 전달되지 않은 경우 argv[0]빈 문자열입니다.

    에서 언급 한 바와 같이 이 질문에 다른 답변 , 파이썬 과 같은 도구를 통해 단독 실행 프로그램으로 변환 된 스크립트 py2exe에 또는 pyInstaller 중에이 이 방법을 사용하는 경우 (즉, 원하는 결과를 표시하지 않을 수 있습니다 sys.argv[0]이름이 아닌 실행 파일의 이름을 길게 것 해당 실행 파일 내의 기본 Python 파일).

  • 불규칙한 가져 오기 작업으로 인해 위에서 언급 한 옵션이 작동하지 않는 경우 inspect 모듈 이 유용 할 수 있습니다. 특히, 호출 inspect.getfile(...)에 대한 것은 inspect.currentframe()후자는 것이지만, 일할 수있는 반환None 하지 않고 구현에서 실행할 때 파이썬 스택 프레임.


심볼릭 링크 처리

현재 스크립트가 심볼릭 링크 인 경우 위의 모든 파일은 실제 파일의 경로가 아닌 심볼릭 링크의 경로를 반환 os.path.realpath(...)하므로 후자를 추출하려면 호출해야합니다.


실제 파일 이름을 추출하는 추가 조작

os.path.basename(...)실제 파일 이름을 추출하기 위해 위의 어느 하나에서 os.path.splitext(...)호출 될 수 있으며, 에서처럼 접미사를 자르기 위해 실제 파일 이름에서 호출 될 수 있습니다 os.path.splitext(os.path.basename(...)).

에서 파이썬 3.4 이후, 당 PEP (428)PurePath클래스pathlib모듈은 물론 위의에 사용할 수있다. 특히 pathlib.PurePath(...).name실제 파일 이름을 pathlib.PurePath(...).stem추출하고 접미사없이 실제 파일 이름을 추출합니다.


답변

__file__주 파일에서 수입과 다를 수 있습니다이 코드 상주, 해석되는 파일을 제공 할 것입니다. 메인 파일을 얻기 위해 특수 __main__ 모듈을 사용할 수 있습니다.

import __main__ as main
print(main.__file__)

주의 __main__.__file__는 휴대용하기 위해 위와 같이 파이썬 2.7이 아닌 3.2 작품, 그래서 수입과 같은 구문을 사용합니다.


답변

위의 답변이 좋습니다. 그러나 위의 결과를 사용 하여이 방법이 더 효율적이라는 것을 알았습니다.
이로 인해 실제 스크립트 파일 이름이 경로가 아닙니다.

import sys
import os
file_name =  os.path.basename(sys.argv[0])


답변

최신 Python 버전 (3.4+)의 Path(__file__).name경우 더 관용적이어야합니다. 또한 확장명이 Path(__file__).stem없는 스크립트 이름을 제공합니다 .py.


답변

이 시도:

print __file__