Python 프로그램 내에서 PowerShell 스크립트 실행

Migel Hewage Nimesha 2023년6월21일
  1. Python subprocess.Popen() 메서드
  2. Popen() 메서드를 사용하여 Python 프로그램 내에서 PowerShell 스크립트 실행
Python 프로그램 내에서 PowerShell 스크립트 실행

Windows PowerShell은 풍부한 기능 집합을 제공하는 수십 개의 내장 cmdlet으로 구성됩니다. 이러한 기능 중 일부는 고유하며 PowerShell을 통해서만 사용할 수 있습니다. 따라서 Python과 같은 다른 프로그래밍 언어 내에서 PowerShell 스크립트를 사용할 수 있다면 매우 유용합니다.

이 문서에서는 Python 코드에서 PowerShell 논리를 실행하는 데 중점을 둡니다.

Python subprocess.Popen() 메서드

Python에서는 subprocess.Popen() 메서드를 사용하여 외부 프로그램을 실행할 수 있습니다. subprocess 모듈은 이전 os 모듈에서 사용할 수 있는 것보다 몇 가지 더 효율적인 방법으로 구성됩니다. 따라서 os 모듈 대신 subprocess 모듈을 사용하는 것이 좋습니다.

Python 프로그램에서 PowerShell 코드를 실행할 것이므로 가장 편리한 방법은 subprocess 모듈에서 Popen 클래스를 사용하는 것입니다. 외부 프로그램을 실행하기 위해 별도의 자식 프로세스를 만듭니다.

명심해야 할 한 가지는 이 프로세스가 플랫폼에 따라 다르다는 것입니다.

subprocess.Popen()을 호출할 때마다 Popen 생성자가 호출됩니다. 다음과 같이 여러 매개변수를 허용합니다.

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

args 인수는 외부 프로그램을 시작하는 명령을 전달하는 데 사용됩니다. 매개변수와 함께 명령을 전달할 수 있는 두 가지 방법이 있습니다.

  1. 일련의 인수로서

    Popen(["path_to_external_program_executable", "command_args1", "command_args2", ...])
    
  2. 단일 명령 문자열로

    Popen('path_to_external_program_executable -command_param1 arg1 -command_param2 arg2 ...')
    

인수 시퀀스는 Popen 생성자와 함께 권장됩니다.

다음으로 중요한 인수는 다음 섹션에서 사용할 stdout 매개변수입니다. 이것은 프로세스가 사용해야 하는 표준 출력을 지정합니다.

Popen() 메서드를 사용하여 Python 프로그램 내에서 PowerShell 스크립트 실행

먼저 콘솔 창에 인쇄되는 간단한 PowerShell 스크립트를 만듭니다.

Write-Host 'Hello, World!'

sayhello.ps1로 저장합니다.

다음으로 runpsinshell.py라는 Python 스크립트를 만듭니다. subprocess.Popen() 명령을 사용할 것이므로 subprocess 모듈을 먼저 가져와야 합니다.

import subprocess

그런 다음 다음과 같이 argsstdout 매개 변수를 사용하여 Popen 생성자를 호출합니다.

p = subprocess.Popen(["powershell.exe", "D:\\codes\\sayhello.ps1"], stdout=sys.stdout)

보시다시피 인수는 권장되는 방식인 시퀀스로 전달되었습니다. 첫 번째 인수는 외부 프로그램 실행 파일 이름이고 다음 인수는 이전에 만든 PowerShell 스크립트의 파일 경로입니다.

기억해야 할 또 다른 중요한 사항은 표준 출력 매개변수를 sys.stdout으로 지정해야 한다는 것입니다. Python 프로그램에서 sys.stdout을 사용하려면 sys 모듈도 가져와야 합니다.

최종 프로그램은 다음과 같아야 합니다.

import subprocess
import sys

p = subprocess.Popen(["powershell.exe", "D:\\codes\\sayhello.ps1"], stdout=sys.stdout)
p.communicate()

마지막으로 다음과 같이 Python 프로그램을 실행해 보겠습니다.

python .\runpsinshell.py

출력:

Python 프로그램에서 PowerShell 스크립트 실행 - 출력

예상대로 PowerShell 스크립트가 Python 코드에서 실행되고 Hello, World!가 인쇄되었습니다. PowerShell 창에 문자열.

Python 프로그램은 Popen 생성자 인수를 단일 문자열로 전달하여 작성할 수도 있습니다.

import subprocess
import sys

p = subprocess.Popen(
    'powershell.exe -ExecutionPolicy RemoteSigned -file 	 "D:\\codes\\sayhello.ps1"',
    stdout=sys.stdout,
)

p.communicate()
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.