공부일지

[Python]sys.argv 활용으로 main 함수와 test 함수 분리해서 쓰기 본문

Computer/공부정리

[Python]sys.argv 활용으로 main 함수와 test 함수 분리해서 쓰기

이르리의 공부일지 2025. 4. 23. 17:09

기존 나의 방식

기존에는 원하는 기능을 하는 파일에 main 함수를 만들어서 하단에 다음 코드를 작성했다.

if __name__ == "__main__":
    main()

그러고 나서 CLI에서 파일명을 치거나 단축키 F1(VSCode 기준)을 이용해 파일을 실행한다.

python fetch_data.py

그러나 기본 기능을 하는 함수에 대해서

간단한 테스트 버전이 필요할 때가 많다.

그러면 나는 항상 테스트 파일을 따로 만들어 실행해서 확인하고

main 함수가 있는 파일을 수정하곤 했다.

 

가령, fetch_data.py라는 파일의 기본 동작은 옥션 사이트의 전체 페이지 수집이다.

test.py를 따로 만들어서 fetch_data.py의 테스트 버전(반복문이 없다거나 간단한 상태, 혹은 데이터 상태를 확인할 정도만)을 작성한다.

 

이렇게 되면

 

장점

테스트 버전과 분리하기 때문에 파일을 역할별로 관리할 수 있다.

단점

이 파일 저 파일 왔다갔다 해야하고, 파일 양이 많아지면 test 파일 이름 만들기도 성가시고 관리도 잘 안된다.

테스트 파일 특성상 일회성인 경우도 많은데, 그러면 test 파일만 모아놓는 폴더를 만든다고 해도

한참 뒤에는 지저분해지고 필요한 코드는 찾기 힘든 상태가 된다.

 

이러한 단점으로 인해 테스트 코드를 한 파일에 관리하기로 한다..!

이말년 시리즈

 

인자를 이용한 프로그램 실행

sys.argv를 이용하면 다음과 같이 같은 파일 내 다른 함수에 대해 명령어 인자만 추가해서 실행시킬 수 있다.

# main 함수 실행
python fetch_data.py

# test 함수 실행(테스트 버전 실행)
python fetch_data.py test

 

코드 내 구성은 다음과 같다.

argv 모듈은 arguments(인자) value(아마?)를 의미하고

sys.argv[0]은 위 예문에 따라 'fetch_data.py'에 해당하고 

sys.argv[1]은 'test'에 해당한다.

따라서 아래 코드를 통해 당분간은 불편함을 해소할 수 있을 것 같다.

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == "test":
        test()
    else:
        main()

 

만족!


참고링크

공식문서

https://docs.python.org/3/library/sys.html

 

sys — System-specific parameters and functions

This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter. It is always available. Unless explicitly noted oth...

docs.python.org