[英]Convert PowerShell output to Python and store it in variable
提前抱歉愚蠢的問題。
我正在嘗試編寫使用 PowerShell 命令運行虛擬機的簡單 python 腳本。
我在將 output 從 PowerShell 命令轉換為 Python 中的變量時遇到了一點問題。
這個想法是:
我啟動虛擬機,然后檢查它的 state,如果 state 正在運行 - 啟動所有活動。
在 PowerShell 中執行它不是問題,我編寫了所有命令(啟動 VM,檢查 state,if 語句等),但是從 py 文件執行它是一個問題。
我的腳本如下所示:
import subprocess
import time
import os
class Utils(object):
def __init__(self):
self.ps_exec = r"C:\path\PsExec.exe"
self.power_shell = r"C:\path\powershell.exe"
def vm(self, apply_vm_script):
subprocess.Popen([self.power_shell, apply_vm_script])
util = Utils()
def turn_on_vm(vm_name, checkpoint_name):
apply_vm_script = 'Invoke-Command -Computername name -ScriptBlock ' \
'{ Get-VM ''"' + vm_name + '"'' | get-vmsnapshot -Name ' + '"' + checkpoint_name + '" | ' \
'Restore-VMSnapshot -Confirm:$false ; Start-VM -Name ''"' + vm_name + '"''}'
util.vm(apply_vm_script)
time.sleep(10)
def check_if_vm_on(vm_name):
check_vm_script = 'Invoke-Command -Computername name -ScriptBlock { Get-VM | where {$_.Name -eq ' + vm_name + ' } | where { $_.State -eq "Running" } | select Name,State}'
util.vm(check_vm_script)
time.sleep(3)
def test():
turn_on_vm('VM_name', 'checkpoint_name')
if(check_if_vm_on('VM_name')):
Do my activity
def main():
test()
if __name__ == '__main__':
main()
此外,我可以在 PowerShell 中執行所有 if 操作,但也無法將 bool output 轉換為 Python:
if($State -like '*Running*') { Write-Output "True" }
State 前面已經定義好了,變量沒問題。
任何想法如何解決它?
先感謝您!!!
您需要從 powershell 腳本獲取標准輸出到您的 python 程序。 這可以通過Popen.communicate()來完成。
def vm(self, apply_vm_script):
p = subprocess.Popen([self.power_shell, apply_vm_script], stdout=subprocess.PIPE)
result = p.communicate()[0]
return str(result)
您還需要從check_if_vm_on
返回此值
def check_if_vm_on(vm_name):
check_vm_script = 'Invoke-Command -Computername name -ScriptBlock { Get-VM | where {$_.Name -eq ' + vm_name + ' } | where { $_.State -eq "Running" } | select Name,State}'
result = util.vm(check_vm_script)
time.sleep(3)
return result
然后您將能夠使用 if 語句檢查它:
if(check_if_vm_on('VM_name') == "True"):
Do my activity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.