Python에서 스크립트 실행

Vaibhav Vaibhav 2023년10월10일
  1. Python에서 Python 스크립트 실행
  2. globalslocals 사용
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

globalslocalsexec()에 전달되지 않으면 요구 사항(스크립트 실행)이 자동으로 처리됩니다. Python은 스크립트를 실행하는 데 필요한 모든 변수나 함수를 알아낼 만큼 충분히 똑똑합니다. 예를 들어 다음 코드는 오류 없이 완벽하게 실행됩니다.

from random import randint

code = "print(randint(1, 6))"
exec(code)  # No globals or locals passed

globalslocals 사용

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
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.