如何将这个Powershell函数转换为在Python中工作?

2024-06-28 20:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在Python代码中运行Powershell函数(它检查进程使用的CPU百分比),而不仅仅是在Powershell中。然而,我有麻烦转换到那里的工作。你知道吗

#Powershell code to convert:
$Processname = "notepad"
$CpuCores = (Get-WMIObject Win32_ComputerSystem).NumberOfLogicalProcessors
$Samples = (Get-Counter “\Process($Processname)\% Processor Time”).CounterSamples
($Samples | Select InstanceName, @{Name=”CPU”;Expression=    {[Decimal]::Round(($_.CookedValue / $CpuCores), 2)}}).CPU


#My attempt at converting it to Python:
import subprocess
processToCheck = "notepad"
process = subprocess.Popen(["powershell",
                                """Invoke-Command -ScriptBlock {$CpuCores = (Get-WMIObject Win32_ComputerSystem).NumberOfLogicalProcessors | $Samples = (Get-Counter “\Process(%s)\% Processor Time”).CounterSamples ; Write-Host $Samples}"""
                                % (processToCheck)], stdout=subprocess.PIPE)
print process.communicate()[0]

运行Python版本的代码时,出现以下错误: 回溯(最近一次呼叫): 文件“”,第3行,在 %(processToCheck)],标准输出=子流程管道) TypeError:格式字符串的参数不足


Tags: to代码getcpusubprocesssampleswin32powershell
1条回答
网友
1楼 · 发布于 2024-06-28 20:19:56
import subprocess
processToCheck = "notepad"
script = """
    $CpuCores = (Get-WMIObject Win32_ComputerSystem).NumberOfLogicalProcessors;
    $Samples = (Get-Counter "\Process(%s)\%% Processor Time").CounterSamples.CookedValue;
    [Decimal]::Round($Samples / $CpuCores, 2);
""" % (processToCheck)
proc = subprocess.Popen(["powershell", script], stdout=subprocess.PIPE)
print(proc.communicate()[0])
proc.wait()

相关问题 更多 >