Продолжая цикл

Итак, у меня есть код, который должен запускаться через текстовый файл и пинговать IP-адреса, если пинг равен 0, он выполняет «nslookup» для него, а затем он должен продолжаться, но после того, как он делает первый в терминале, он оставил на > как бы ожидая ввода. В других случаях мой код проходит через txt-файл нормально, но как только я добавляю «nslookup», он останавливается после первого и ждет ввода.

Есть ли способ заставить его продолжать циклически просматривать текстовый файл, пока он не дойдет до конца?

Вот код, который я использую. Я знаю, что есть другие способы поиска IP-адреса, но я пытаюсь использовать «nslookup» в этом случае, если это невозможно.

import os
with open('test.txt','r') as f:
  for line in f:
         response = os.system("ping -c 1 " + line)
         if response == 0:
                 print os.system('nslookup')
         else:
                 print(line, "is down!")

person Cry2Senpai    schedule 05.09.2017    source источник


Ответы (1)


это просто потому, что вы забыли передать аргумент nslookup

Когда вы не передаете никаких аргументов, программа запускается в интерактивном режиме со своей собственной оболочкой.

L:\so>nslookup
Default server :   mydomain.server.com
Address:  128.1.34.82

> 

Но использование os.system не позволит вам получить вывод команды. Для этого вам понадобится

output = subprocess.check_output(['nslookup',line.strip()])
print(output) # or do something else with it

вместо вашей команды os.system

person Jean-François Fabre    schedule 05.09.2017
comment
Итак, когда я помещаю os.system('nslookup {}'.format(line.strip())) я получаю файл ‹stdin›, строка 5, в ‹module› ValueError: имя поля нулевой длины в формате - person Cry2Senpai; 05.09.2017
comment
Забавно, но в версии 2.7 он работает так же, как и у вас, но системы, которые я буду использовать в версии 2.6. Большое спасибо, хотя и очень полезно. - person Cry2Senpai; 05.09.2017