- 작성시간 : 2018/05/08 20:09
- 퍼머링크 : mcchae.egloos.com/11295372
- 덧글수 : 0
파이썬에서 특정 문자열의 코드를 수행시키려면,





exec(...) 빌트인 함수를 이용합니다.
예를 들어,
code = """
def myrun():
def sum(i, j):
return i + j
# pdb.set_trace()
i = 1
j = 2
k = sum(i, j)
print('sum of %s, %s = %s' % (i, j, k))
if __name__ == '__main__':
myrun()
"""
위와 같은 code라는 문자열에 어느 파이썬 코드가 들어가 있다고 하였을 때,
exec(code)
라고 실행하면 해당 코드가 실행됩니다.
그런데 이 방법을 이용하면 PyCharm 과 같은 IDE에서 해당 코드를
디버깅 할 수 있는 방법이 없습니다.
여러가지 시행착오를 거쳐 다음과 같은 방법을 얻었습니다.
테스트 환경은 다음과 같습니다.
OS: macOS
Python: 3.6.2 (3.5+ 에서 동작합니다)
위와 같이 해당 코드를 불러와서 디버깅을 해 봅니다.
위 과정은 해당 코드를 foo.py 라는 모듈로 저장합니다.
(저장되는 폴더는 해당 파이썬 인터프리터가 알고 있는 패스입니다)
spec = importlib.util.spec_from_file_location("foo", cf)
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
16~18 줄의 위의 코드가 dynamic 하게 해당 코드를 읽어 import 하는 부분입니다.
이제 foo라는 것은 실제 모듈과 동일하게 이용할 수 있으므로,
위와 같이 19줄에서 멈춘 다음 F7 (Step Into)를 하면,
실제 dynamic 하게 한들어진 foo.py 소스 코드로 들어가서 디버깅 할 수 있는 것을 볼 수 있습니다.
다시 원 소스로도 잘 돌아오며, 실행이 완료된 후 finally 에서 해당 코드를 삭제해 버렸습니다.
결과는 static 하게 준 것과 동일하게 잘 동작하고 디버깅할 수 있었습니다.
어느 분께는 도움이 되셨기를 ..



덧글