Shell script로 모델 학습에 필요한 arguments들을 관리해줬었다. 하지만 debugging을 하려고 하면서 부터 문제가 생겼다.
Python file은 한 줄씩 읽으면서 실행이 되서 breakpoint를 걸어주면 breakpoint를 찍은 line 바로 위 까지만 코드를 실행시키는 방식으로 debugging을 할 수 있다. 따라서 arguments가 실행시키고자 하는 python file에 직접적으로 지정되어 있어야 debugging을 할 수 있는 것이다.
예를 들면,
bye = "bye" bye변수를 선언한 자리에 breakpoint를 걸어주니 바로 그 위까지만 실행이 되서 DEBUG CONSOLE에 bye를 치면 defined 되지 않았다고 뜬다.
하지만 Shell script를 이용한 argument 파싱하는 과정을 보면 위와 같은 debugging이 불가능한 구조임을 확인 할 수 있다.
📌여기서 ArgumentParser이란 프로그램 실행시에 커맨드 라인에 argument(인수)를 받아 처리를 간단히 할 수 있도록 하는 표준 라이브러리 이다.
shell script를 이용한 argument 지정과정을 보면 다음과 같다.
1) import argparse
2) parser를 만든다
3) 인수 설정
4) shell scrip를 사용해 argument를 넣어준다
shell script에서 Python file hello.py
를 실행시켜주면서 동시에 그 파일에 argument를 지정해줄 수 있다.
shell script파일 실행시켜 hello.py
file을 통째로 실행시키기는 것이기 때문에 중간에 breakpoint를 걸어 중간까지만 실행시키고 debugging을 하는 것이 불가능하다.
Python은 한 줄 한 줄 실행이 되기에 breakpoint를 활용한 간편한 debugging이 가능한 것이다. 하지만 shell script를 사용한다면 이러한 장점을 이용할 수가 없어서 아쉽다.
이렇게 Python파일만 실행하면 argument를 받아오지 못했기 때문에 변수 bye를 출력해도 None이 뜨는 것을 확인할 수 있다.
config.yml파일에 argument를 지정해주고, arguments를 직접 Python file에 불러와 사용하는 것이다. 이렇게 해주면 Python file에 argument가 직접 들어와서 변수 설정을 직관적으로 해줄 수 있기 때문에 debugging이 가능하다. 또한 더 쉽게 arguments를 관리할 수 있다는 장점도 있다.
1) config.yml에 arguments를 입력해준다.
2) config.yml 내용을 yaml.load로 불러와 data
변수에 넣어준다.
data
변수에 arguments들이 다 들어왔기 때문에 debugging이 위와 같이 가능한 것이다.