programing

Python 스크립트에서 PowerShell 함수 실행

powerit 2023. 8. 16. 22:39
반응형

Python 스크립트에서 PowerShell 함수 실행

Python 스크립트에서 PowerShell 함수를 실행해야 합니다..ps1 및 .py 파일은 현재 동일한 디렉토리에 있습니다.제가 부르고 싶은 기능은 PowerShell 스크립트에 있습니다.제가 본 대부분의 답변은 Python에서 전체 PowerShell 스크립트를 실행하는 것입니다.이 경우, 저는 Python 스크립트에서 PowerShell 스크립트 내에서 개별 기능을 실행하려고 합니다.

다음은 PowerShell 스크립트 샘플입니다.

# sample PowerShell
Function hello
{
    Write-Host "Hi from the hello function : )"
}

Function bye
{
    Write-Host "Goodbye"
}

Write-Host "PowerShell sample says hello."

Python 스크립트:

import argparse
import subprocess as sp

parser = argparse.ArgumentParser(description='Sample call to PowerShell function from Python')
parser.add_argument('--functionToCall', metavar='-f', default='hello', help='Specify function to run')

args = parser.parse_args()

psResult = sp.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
'-ExecutionPolicy',
'Unrestricted',
'. ./samplePowerShell',
args.functionToCall],
stdout = sp.PIPE,
stderr = sp.PIPE)

output, error = psResult.communicate()
rc = psResult.returncode

print "Return code given to Python script is: " + str(rc)
print "\n\nstdout:\n\n" + str(output)
print "\n\nstderr: " + str(error)

그래서 어떻게든 PowerShell 샘플에 있는 'hello()' 또는 'bye()' 함수를 실행하고 싶습니다.함수에 매개 변수를 전달하는 방법도 알고 싶습니다.감사합니다!

당신은 두 가지를 원합니다: 점 소스 스크립트 (제가 알기로는 (파이썬의 가져오기와 유사합니다), 그리고 subprocess.call.

import subprocess
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&hello"])

여기서 발생하는 일은 powershell을 시작하고 스크립트를 가져오라고 말하고 세미콜론을 사용하여 문을 종료하는 것입니다.그러면 더 많은 명령, 즉 안녕하세요를 실행할 수 있습니다.

함수에 매개 변수를 추가할 수도 있으므로 위 문서의 매개 변수(약간 수정됨)를 사용해 보겠습니다.

Function addOne($intIN)
{
    Write-Host ($intIN + 1)
}

그런 다음 파워셸이 입력을 처리할 수 있는 한 원하는 매개 변수로 함수를 호출합니다.그래서 우리는 위의 파이썬을 다음과 같이 수정할 것입니다.

import subprocess
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&addOne(10)"])

이것은 나에게 출력을 줍니다.

PowerShell sample says hello.
11

여기 그것을 하는 짧고 간단한 방법이 있습니다.

import os
os.system("powershell.exe echo hello world")

테스트 대상Python 3.10최근에Windows 10 x642023-06-05 기준:

# Auto-detect location of powershell ...
process = subprocess.Popen("where powershell", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
stdout, stderr = stdout.decode('utf-8'), stderr.decode('utf-8')
powershell_path = stdout.strip()

# ... then run Powershell command and display output.
process = subprocess.Popen(f"{powershell_path} echo 'Hello world!'", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
stdout, stderr = stdout.decode('utf-8'), stderr.decode('utf-8')
print(stdout)

출력:

Hello world!

이 스크립트의 장점은 파워셸의 위치를 자동으로 감지하여 Windows 버전마다 다른 문제를 방지한다는 것입니다.

언급URL : https://stackoverflow.com/questions/14508809/run-powershell-function-from-python-script

반응형