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 x64
2023-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
'programing' 카테고리의 다른 글
반투명 배경을 만들려면 어떻게 해야 합니까? (0) | 2023.08.16 |
---|---|
HTML/CSS를 사용하여 텍스트에 공백/탭을 삽입하는 방법 (0) | 2023.08.16 |
GCC가 변수를 할당하기 전에 임시 위치로 이동하는 이유는 무엇입니까? (0) | 2023.08.16 |
Get-WMIObject \Get-Cim 인스턴스는 실제로 무엇을 합니까? (0) | 2023.08.11 |
Fill remaining vertical space with CSS using display:flex (0) | 2023.08.11 |