Python에서 스크립트 실행
이 기사에서는 Python을 사용하여 또 다른 Python 스크립트를 실행하는 방법에 대해 설명합니다.
Python에서 Python 스크립트 실행
exec()
함수의 도움으로 Python을 사용하여 Python 스크립트를 실행할 수 있습니다. exec()
함수는 문자열 및 바이트 형식 모두에서 Python 코드의 동적 실행을 허용하는 Python 유틸리티입니다. 이 함수는 세 개의 인수, 즉,
object
: 문자열 또는 바이트 형식의 Python 코드globals
: 선택적 인수입니다. 사전이며 전역 함수와 변수를 포함합니다.locals
: 선택적 인수입니다. 이것은 사전이며 지역 함수와 변수를 포함합니다.
예제는 다음 코드를 참조하십시오.
file_name = "code.py"
content = open(file_name).read()
exec(content)
위의 코드는 먼저 작업 디렉토리에서 code.py
라는 이름의 파일을 열고 그 내용을 읽고 content
라는 이름의 변수에 저장한 다음 읽은 내용을 exec()
에 전달합니다. 기능. 읽은 내용은 일부 Python 코드이며 exec()
메서드는 해당 Python 코드를 실행합니다.
로컬 또는 전역 변수가 있는 경우 사전에 저장하고 실행 가능한 스크립트에 전달할 수 있습니다. 그런 다음 스크립트는 이러한 변수를 활용하고 코드를 실행할 수 있습니다. 전역 변수로 전달하지 않은 실행 가능한 스크립트 내에서 일부 기능을 사용하는 경우 기본 프로그램에서 예외가 발생합니다.
다음 코드는 동일한 내용을 보여줍니다.
from random import randint
code = "print(randint(1, 6))"
exec(code, {}, {}) # Empty globals and locals
출력:
Traceback (most recent call last):
File "<string>", line 4, in <module>
File "<string>", line 1, in <module>
NameError: name 'randint' is not defined
globals
및 locals
가 exec()
에 전달되지 않으면 요구 사항(스크립트 실행)이 자동으로 처리됩니다. Python은 스크립트를 실행하는 데 필요한 모든 변수나 함수를 알아낼 만큼 충분히 똑똑합니다. 예를 들어 다음 코드는 오류 없이 완벽하게 실행됩니다.
from random import randint
code = "print(randint(1, 6))"
exec(code) # No globals or locals passed
globals
및 locals
사용
globals
를 통해 exec()
함수에 전달하여 실행 가능한 스크립트 내에서 사용자 정의 함수와 가져온 함수를 생성할 수 있습니다. 위에서 언급했듯이 이러한 종속성이 없으면 예외가 발생합니다.
다음 코드를 참조하십시오. 여기에서 사용자 정의 함수를 정의하고 random
패키지에서 함수를 가져옵니다. 그러면 두 함수 모두 globals
매개변수를 통해 사전 내부에 래핑된 exec()
함수로 전달됩니다.
from random import randint
def get_my_age():
return 19
globals = {"randint": randint, "get_my_age": get_my_age}
code = """
print(randint(1, 6))
print(get_my_age())
"""
exec(
code,
globals,
)
출력:
5 # It can be any number between 1 and 6, both inclusive
19
현재 이러한 기능은 globals
매개변수를 통해 전달되었습니다. locals
를 통해 전달할 수도 있습니다. exec
함수는 키워드 인수를 허용하지 않기 때문에 globals
에 대한 빈 사전을 전달하고 locals
를 전달해야 합니다.
from random import randint
def get_my_age():
return 19
locals = {"randint": randint, "get_my_age": get_my_age}
code = """
print(randint(1, 6))
print(get_my_age())
"""
exec(code, {}, locals)
출력:
2 # It can be any number between 1 and 6, both inclusive
19