Python os.system не возвращает те же данные, что и командная строка - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь написать скрипт, который будет использовать netstat для проверки временных портов на компьютере с Windows.Когда я тестирую этот скрипт в IDLE в Windows, он возвращается с 0.

Вот мой код, который я тестирую:

import os
oPorts=os.system('netstat -ano | find /i \"estab\" /c')
print(oPorts)

Вот что происходит, когда я пытаюсьзапустите это в Python:

os.system Python Script] 1

Однако, вот вывод, когда я запускаю то же самое в командной строке.

cmd prompt output

Так почему же Python выводит 0, когда на хосте Windows явно установлено около 311 установленных соединений?Чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Функция os.system возвращает состояние завершения команды. Не вывод команды.Вместо этого вы должны использовать модуль подпроцесс .Затем вы можете захватить вывод.

0 голосов
/ 16 ноября 2018

Следующий код дал мне именно тот результат, который я намеревался.

import subprocess

established = (subprocess.Popen('netstat -ano | find /i \"estab\" /c',
                               stdout=subprocess.PIPE,
                               shell=True).communicate()[0].decode('utf-8').strip())

Я не уверен, что разница точно между check_output и Popen, но Popen и .communicate()[0].decode('utf-8').strip()) былиключи.

0 голосов
/ 16 ноября 2018

Возвращаемое значение из исполняемого процесса не такое же, как его выход.По соглашению процесс возвращает 0, чтобы указать на успех, и все остальное, чтобы указать на неудачу.Когда вы запускаете команду из командной строки, возвращаемое значение обычно не печатается.Чтобы захватить вывод, вам нужно перенаправить stdout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...