Python изменяет результаты команды powershell, получающей использование памяти процесса - PullRequest
0 голосов
/ 12 апреля 2019

Я создаю скрипт на 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 .. МБ каждый раз, хотя фактическое использование памяти, сообщаемое диспетчером задач, варьируется от 8100-8400 МБ.

Затем я попробовал команду Powershell, чтобы сделать то же самое:

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

где WS (рабочий набор) - это самый близкий показатель к тому, что сообщает диспетчер задач. Выполнение этого в командном терминале вернуло число в пределах 20 МБ от текущего использования памяти процессами. Затем я протестировал выполнение этой команды в python с использованием подпроцесса:

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

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

и os.system:

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

Оба возвращают одно и то же 4095,99 МБ psutil (вплоть до последней цифры.). Так что что-то в питоне изменяет способ, которым он видит, который обрабатывает память. Попытался запустить его на нескольких пользователях, включая пользователей с правами администратора и пользователя, на котором запущен процесс с одинаковыми результатами. Я озадачен тем, как python мог изменять вызов powershell, чтобы он возвращал результат, отличный от того, который выполняется вне его.

...