вывод подпроцесса в стандартный вывод и в ТРУБУ - PullRequest
0 голосов
/ 25 марта 2012

Я использую модуль subprocess следующим образом:

ping = subprocess.Popen('fping.exe 192.168.2.3 196.65.58.69', stdout=PIPE)
output = ping.stdout.readlines()

Мне нужен список output, чтобы обработать его позже в программе, но похоже, что stdout направлен наPIPE это не выводит результаты на консоль.Я хотел бы получить и консольный вывод (как он выполняется) и список output.

Как я могу это сделать?

Я выполнил поиск и получил ответ здесь , но я не могу его реализовать.

Я использую Python 3.x в Windows env.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Я нашел способ сделать это вот так:

for line in os.popen("Fping x.x.x.x x.x.x.x -l"):
    ipList.append(line)
    print(line)

Таким образом, я могу получить результаты из программы Fping в список, и распечатать его на экране, покаон выполняется, поскольку цикл for с os.popen не ожидает завершения программы, а всегда зацикливается на каждой строке программы.

0 голосов
/ 26 марта 2012

Нет такой вещи, как труба, которая идет в два места.Все, что записано в канал, будет прочитано только один раз.(Хотя теоретически возможно, что ваша программа и консоль имеют доступ к одному и тому же каналу, но если вам это удастся, то только часть данных попадет в вашу программу, и только те данные, которые этого не сделают, окажутся наконсоль.) Чтобы получить весь вывод вашей программы и консоли, кто-то должен будет прочитать и продублировать данные.В Unix-подобной системе вы можете использовать для этого команду «tee», но, вероятно, у вас ее нет на вашей машине с Windows.

Так что вам придется записывать вывод на консоль, как выполучить его.

В этом случае вы, вероятно, можете избежать использования readline () в цикле вместо readlines ().

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