개요
이번 글에서는 현재 실행 중인 파이썬(Python) 스크립트의 파일 이름을 화면에 출력하는 프로그램을 만들어 보겠습니다. 코딩 난이도는 매우 낮지만, 명령줄 인수가 프로그램에 어떻게 전달되는지 이해하기 좋은 예제입니다.
C 언어의 int main(int argc, char** argv)처럼 파이썬 역시 프로그램 실행 시 여러 인수를 전달받습니다. 다만 파이썬에서는 이를 sys.argv라는 리스트 형태로 제공합니다. 첫 번째 요소인 sys.argv[0]에는 실행 중인 스크립트의 경로와 파일 이름이 담겨 있고, 두 번째 요소부터는 프로그램에 전달된 실제 인수들이 순서대로 저장됩니다.
예제 코드
import sys
def main():
# sys.argv[0]에는 실행 중인 스크립트의 전체 경로가 들어 있음
my_program = sys.argv[0]
# 마지막 경로 구분자 위치를 찾아 파일명만 추출
index = max(my_program.rfind("\\"), my_program.rfind("/")) + 1
# 파일명만 잘라내기(slicing)
file_name = my_program[index:]
print("Program Name:", file_name)
# 메인 블록
if __name__ == "__main__":
main()
실행 결과
Program Name: python277.py
스크립트가 C:/Users/TP/Desktop/PYTHON FOLDER/python241-280/ 폴더에 저장되어 있다면 위와 같이 파일 이름만 깔끔하게 출력됩니다. 전체 경로까지 확인하고 싶다면 print(sys.argv[0])를 그대로 사용하면 됩니다.
코드 설명
- sys.argv : 명령줄에서 전달된 인수를 담은 리스트입니다. 첫 번째 요소는 항상 실행 중인 스크립트의 경로를 가리킵니다.
- rfind() : 특정 문자가 문자열에서 마지막으로 등장하는 위치를 반환합니다. 윈도우는 역슬래시(\), 리눅스와 macOS는 슬래시(/)를 경로 구분자로 사용하기 때문에 두 위치를 비교해 더 큰 값을 선택했습니다.
- 문자열 슬라이싱 : 구분자 바로 다음 위치부터 문자열 끝까지 잘라내어 순수한 파일 이름만 남깁니다.
- if __name__ == "__main__" : 스크립트를 직접 실행했을 때만 main() 함수가 동작하도록 하는 파이썬의 표준적인 패턴입니다.
더 간단한 방법 : os.path.basename()
경로를 직접 다루지 않고 os.path 모듈을 활용하면 한 줄로 해결할 수 있습니다. 운영체제에 상관없이 동작하므로 실무에서는 이 방식이 더 권장됩니다.
import sys
import os
print("Program Name:", os.path.basename(sys.argv[0]))
마무리
정리하면, 실행 중인 스크립트의 이름은 sys.argv[0]에서 얻을 수 있으며, 파일 이름만 필요하다면 문자열 슬라이싱이나 os.path.basename()으로 손쉽게 추출할 수 있습니다.