예전에 관련해서 글을 쓴적이 있습니다.
https://swlock.blogspot.com/2020/04/scripting-on-python.html
이때는 간단하게 테스트만 해봤는데 변수 전달의 경우 어떻게 해야할지 딱히 고민을 하지 않았었습니다. 막상 사용하려고 하면 변수는 전달이 되어야 쓸만할겁니다.
그래서 테스트 해봤습니다.
놀랍게도 변수 전달도 아주 쉽게 되었습니다.
아래 예제를 참고 바랍니다.
main.py
global val1 val1 = 10 val2 = [10,20,30] # py scriptiong print("Script main") print('main val1',val1) print('main val2',val2) data = exec(open('10_py_scripting_script.py').read()) print('return',data) print('main val1',val1) print('main val2',val2)
전역 변수로 val1, val2 를 만들고 스크립트전에 찍고 스크립트 호출후에 값을 출력하도록 만들었습니다.
10_py_scripting_script.py
print("in script") print('__name__',__name__) print('main val1',val1) print('main val2',val2) val1 = 100 val2[1] = 200
실행 결과
Script main main val1 10 main val2 [10, 20, 30] in script __name__ __main__ main val1 10 main val2 [10, 20, 30] return None main val1 100 main val2 [10, 200, 30]
이정도면 훌륭한 결과 입니다. 전역 변수들도 쉽게 처리가 가능하니 에러 처리가 필요하면 제일 처음 초기화 후 제일 마지막에 결과를 변수에 저장하는 방식으로 함수가 정상적으로 수행되었는지 확인 하도록도 구현이 가능할겁니다.
sub에서 실행하는 파일은 자신의 파일 이름을 잃어버리고 호출한 쪽의 이름을 따라가게 됩니다.
핵심이 되는 exec 메소드를 찾아봤습니다.
https://docs.python.org/ko/3/library/functions.html#exec
실패던 성공이던 위 예제와 같이 리턴값은 None이 넘어옵니다.
그래서 에러 처리를 위해서는 전역 변수를 이용하도록 하면 됩니다.
댓글 없음:
댓글 쓰기