Python更改正在获取进程内存使用情况的powershell命令的结果

时间:2019-04-12 17:59:07

标签: python powershell psutil

我正在构建一个Python脚本(在Windows上运行),该脚本检查Java进程的内存使用情况并将其记录下来。我首先尝试使用psutil:

    for proc in psutil.process_iter():
        print(proc.name())
        if "java.exe" in proc.name():

            print("Process Found. Mem used: "+str((proc.memory_info().rss/1024/1024)

这每次都返回4095.99 .. MB,即使任务管理器报告的实际内存使用量在8100-8400 MB之间也是如此。

然后我尝试使用Powershell命令执行相同的操作:

    powershell "Get-Process -Name java | SELECT WS"

其中WS(工作集)是最接近任务管理器报告的度量标准。在命令终端中运行该命令,它返回的数字在进程当前内存使用量的20 MB之内。然后,我测试了如何使用子进程在python中运行此命令:

     process = subprocess.Popen('powershell "Get-Process -Name java | SELECT WS "',stdout=subprocess.PIPE)

     print(process.communicate()[0].strip())

和操作系统:

    result = os.system('powershell "Get-Process -name java | SELECT WS"')
    print(result)

两个都返回相同的4095.99。MB psutil做了(下降到最后一位)。因此,关于python的一些事情正在改变其处理内存的方式。尝试在多个用户(包括admin用户)中运行它,并且该进程在所有运行条件下的用户均具有完全相同的结果。我对python如何修改powershell调用使其返回不同于在其外部运行的结果感到困惑。

0 个答案:

没有答案