У меня есть список IP-адресов, сохраненных в текстовом файле, и я хочу проверить их код (404, 200, 504, ...) с помощью модуля подпроцесса и цикла for. для одного IP-адреса мой код работает нормально, но когда я пытаюсь, список содержит более одного IP-кода, он дает мне некоторые ошибки.Почему модуль подпроцесса не выполняет несколько команд в цикле for?
Вот мой текстовый файл:
77.87.19.114
143.21.15.91
17.63.33.21
24.44.12.181
код я использую:
from subprocess import check_output
def ipcheck200(ip_list_file):
with open(ip_list_file) as f:
content = f.readlines()
for item in content:
# url generator for each ip
url = "http://" + item + "/"
#print(content[0])
# command generator for each ip
command = "python -c " + '"'
command += "import urllib ;"
command += "a = urllib.urlopen('%s') ;print(a.getcode())" % url
command += '"'
proc = check_output(command)
print(proc)
результат будет:
> Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
ipcheck200('test.txt')
File "C:\Users\XXXX\XXXX\XXXX\file.py", line 17, in ipcheck200
proc = check_output(command)
File "C:\Python27\lib\subprocess.py", line 573, in check_output
raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command 'python -c "import urllib ;a = urllib.urlopen('http://77.87.19.114
/') ;print(a.getcode())"' returned non-zero exit status 1
В конце вашего URL-адреса есть пробел перед символом '/' ('http://77.87.19.114 /'), это нормально? Проверьте вход. – Morb
Что происходит без цикла for? –
@Morb yes Это нормально, я только что проверил. – Uncle