현재 실행중인 Python 스크립트의 이름을 얻으려고합니다.
스크립트 foo.py
가 있는데 스크립트 이름을 얻기 위해 이와 같은 작업을 수행하고 싶습니다.
print Scriptname
답변
__file__
현재 파일의 이름을 얻는 데 사용할 수 있습니다 . 기본 모듈에서 사용될 때 이것은 원래 호출 된 스크립트의 이름입니다.
존재하는 디렉토리 부분을 생략하려면을 사용할 수 있습니다 os.path.basename(__file__)
.
답변
import sys
print sys.argv[0]
foo.py
for python foo.py
, dir/foo.py
for 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__