С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/121: Рейтинг темы: голосов - 121, средняя оценка - 4.78
 Аватар для Goncharikkk
2 / 1 / 2
Регистрация: 21.08.2018
Сообщений: 26

Python ping true\false

14.12.2018, 15:37. Показов 25487. Ответов 36
Метки ping (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, хочу пинговать сервер, и в зависимости от доступности выполнять констуркцию if\else.

Нашел на просторах код:
Python
1
2
3
4
5
6
7
import os
hostname = "8.8.8.8"
response = os.system("ping -c 1 " + hostname)
if response == 0:
    print("True")
else:
    print("False")
Утверждают что ping шлет True\False, но я всегда получаю False в не зависимости от доступности сервера.


Я пробовал использовать модуль subprocess:


Python
1
2
3
4
5
6
7
8
9
10
11
12
import subprocess as sp
 
def ipcheck():
    status,result = sp.getstatusoutput("ping -c1 -w2 " + str(serv))
    if status == 0:
        print("True")
    else:
        print("False")
 
 
serv = '8.8.8.8'
ipcheck()
Результат тот же, постоянно False.

Подскажите, где я допускаю ошибку!? Спасибо !
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2018, 15:37
Ответы с готовыми решениями:

Функция, возвращающая True и False
Помогите написать функцию, которая возвращает True, если число четное и False, если нечетное. Заранее спасибо)

Работа со списками. True и False
Нужно проверить элементы массива. Если при сложении элемента с переменной ex_candy значение больше наибольшего элемента массива(или равно...

Заменить вывод True и False на другие
А как заменить True на yes False на no в python3 ? Добавлено через 3 часа 2 минуты нужно что-то...

36
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
14.12.2018, 23:13
Цитата Сообщение от Goncharikkk Посмотреть сообщение
Подскажите, где я допускаю ошибку!? Спасибо !
Там всегда вернется 0, так как это результат выполнения команды, а не результат который возвращается по пингу. То бишь чтобы вернулся не 0, пинг не должен запуститься в принципе.

Попробуй что-то типа этого, это конечно говнокод и лишь для частного случая прокатит, но задачи написать универсальное решение вроде бы не стоит.

Python
1
2
3
4
5
6
7
8
from subprocess import PIPE, Popen
res = Popen("ping -n 1 192.168.3.3", shell=True, stdout=PIPE)
out = str(res.communicate()[0].decode("CP866"))
 
if out.find("100% потерь") == -1:
    print("Связь есть!")
else:
    print("Хост недоступен!")
Логика проста - получить вывод команды пинг и распарсить результат из чего уже сделать вывод что там происходит. "100% потерь" - это чтоб не возиться с парсингом, чисто донести мысль. CP866 это кодировка в которой возвращается результат. Самому стало интересно, но ничего умнее родить пока не смог, надеюсь гуру подскажут нормальное решение.
0
 Аватар для pazurs
33 / 26 / 8
Регистрация: 01.04.2017
Сообщений: 118
15.12.2018, 13:54
Python
1
2
3
4
5
6
import requests
r = requests.get('https://api.binance.com/api/v1/ping')
if (r.text)== str({}):
    print("доступен")
else:
    print("не доступен")
Может как-то так?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 14:57
Цитата Сообщение от necroslider Посмотреть сообщение
Там всегда вернется 0, так как это результат выполнения команды, а не результат который возвращается по пингу. То бишь чтобы вернулся не 0, пинг не должен запуститься в принципе.
Я не уверен, как я помню когда пинг не проходит возвращать должно не нулевой статуc.

Но даже так можно перенаправить вывод и распарсить его.

Добавлено через 14 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import subprocess
 
try:
   cmd_line = "ping not_exist_site.com"
   p = subprocess.Popen(cmd_line, shell=True, stdout= subprocess.PIPE)
   
   for line_data in p.stdout:
     line = line_data.decode("cp866","ignore").rstrip()
     print(line)
     
   p.wait();     
   print(p.returncode)  #  =1 если  сайт не существует.   0 - если все в порядке.
   
except subprocess.CalledProcessError as e:
   print(e)
except FileNotFoundError as e:
   print(e)
0
 Аватар для pazurs
33 / 26 / 8
Регистрация: 01.04.2017
Сообщений: 118
15.12.2018, 15:04
Цитата Сообщение от necroslider Посмотреть сообщение
Там всегда вернется 0, так как это результат выполнения команды, а не результат который возвращается по пингу. То бишь чтобы вернулся не 0, пинг не должен запуститься в принципе.

Попробуй что-то типа этого, это конечно говнокод и лишь для частного случая прокатит, но задачи написать универсальное решение вроде бы не стоит.

Python
1
2
3
4
5
6
7
8
from subprocess import PIPE, Popen
res = Popen("ping -n 1 192.168.3.3", shell=True, stdout=PIPE)
out = str(res.communicate()[0].decode("CP866"))
 
if out.find("100% потерь") == -1:
    print("Связь есть!")
else:
    print("Хост недоступен!")
Логика проста - получить вывод команды пинг и распарсить результат из чего уже сделать вывод что там происходит. "100% потерь" - это чтоб не возиться с парсингом, чисто донести мысль. CP866 это кодировка в которой возвращается результат. Самому стало интересно, но ничего умнее родить пока не смог, надеюсь гуру подскажут нормальное решение.
os.system(command) - исполняет системную команду, возвращает код её завершения (в случае успеха 0)
в основном коде как я понимаю команда как таковая отсутствует, вместо нее переменная с параметром "ping -c 1 " + 8.8.8.8, возможно я ошибаюсь, но там должна быть команда какого либо (пост,гет) запроса.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 15:15
pazurs, Веб сервера по указанному Ip может и не быть.
0
 Аватар для pazurs
33 / 26 / 8
Регистрация: 01.04.2017
Сообщений: 118
15.12.2018, 15:26
Python
1
2
3
4
5
import requests
r = requests.get('https://api.binance.com/api/v1/ping')
print(r.text)
print(r)
print(bool(r))
результат ответа сервера

Добавлено через 2 минуты
Avazart подскажите, как отвечать со ссылкой на чью-то фразу.
0
15.12.2018, 16:28

Не по теме:

Цитата Сообщение от pazurs Посмотреть сообщение
Avazart подскажите, как отвечать со ссылкой на чью-то фразу.
Тег [ QUOTE ] [ /QUOTE ]

0
 Аватар для pazurs
33 / 26 / 8
Регистрация: 01.04.2017
Сообщений: 118
15.12.2018, 17:05
Спасибо.
Веб сервера по указанному Ip может и не быть
Я так понимаю если запрос идет на локальную машину, например OpenServer(где нет апи)?

Добавлено через 13 минут
Нашел в сети замечание что код автора сделан под Линукс

Добавлено через 8 минут
Копиаст с сети под все оси:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
import platform
 
 
def isUp(hostname):
 
    giveFeedback = False
 
    if platform.system() == "Windows":
        response = os.system("ping "+hostname+" -n 1")
    else:
        response = os.system("ping -c 1 " + hostname)
 
    isUpBool = False
    if response == 0:
        if giveFeedback:
            print (hostname, 'is up!')
        isUpBool = True
    else:
        if giveFeedback:
            print (hostname, 'is down!')
 
    return isUpBool
 
print(isUp("example.com")) #Example domain
print(isUp("localhost")) #Your computer
print(isUp("invalid.example.com")) #Unresolvable hostname: https://tools.ietf.org/html/rfc6761
print(isUp("192.168.1.1")) #Pings local router
print(isUp("192.168.1.135")) #Pings a local computer - will differ for your network
Не понял правда, с кем он пингует, но код рабочий и интересный
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 17:32
Цитата Сообщение от pazurs Посмотреть сообщение
Я так понимаю если запрос идет на локальную машину, например OpenServer(где нет апи)?
У локальной машины есть IP, а вот вебсервера(HTTP) скорее всего не будет.
0
 Аватар для pazurs
33 / 26 / 8
Регистрация: 01.04.2017
Сообщений: 118
15.12.2018, 18:31
Добрый день, хочу пинговать сервер, и в зависимости от доступности выполнять констуркцию if\else.

Нашел на просторах код:
Python
1
2
3
4
5
6
7
import os
hostname = "8.8.8.8"
response = os.system("ping -c 1 " + hostname)
if response == 0:
    print("True")
else:
    print("False")
Полагаю, если третью строку заменить на response = os.system("ping "+hostname+" -n 1") то все заработает

Добавлено через 2 минуты
Проверил, результат True

Добавлено через 22 минуты
Ошибка в формате запроса:
"-c 1"- в Линукс;
"-n 1"- в Виндовс
0
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
15.12.2018, 20:47
Здорово что столько людей подключилось к решению данной проблемы, ибо функционал нужный многим админам, так что давайте сообща придумаем рабочий код.
Цитата Сообщение от pazurs Посмотреть сообщение
Полагаю, если третью строку заменить на response = os.system("ping "+hostname+" -n 1") то все заработает
Добавлено через 2 минуты
Проверил, результат True
Добавлено через 22 минуты
Ошибка в формате запроса:
"-c 1"- в Линукс;
"-n 1"- в Виндовс
К сожалению не работает, попробуйте сами. Пинг вернет не 0, только если вместо IP вбить ерунду.

Проведем эксперимент с этим кодом:

Python
1
2
3
4
5
6
7
8
import os
hostname = "Сюда вбить  айпишник"
response = os.system("ping -n 1 " + hostname)
print('Response - ' + str(response))
if response == 0:
    print("True")
else:
    print("False")
[Все верно] Хост 127.0.0.1 Loopback, доступен - результат 0
[Все верно] Хост 192.168.99.10 со мной в одной сети, доступен - результат 0
[Не верно] Хост 192.168.99.11 со мной в одной сети, нет такого ип - результат 0
[Верно] Хост 192.168.98.11 другая подсеть, нет такого ип - результат 1
[Верно] Хост erunda никаких подсетей, вбита ерунда - результат 1

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

Цитата Сообщение от pazurs Посмотреть сообщение
как отвечать со ссылкой на чью-то фразу
Просто выдели мышкой текст и появится всплывающая кнопка "Цитировать"
Миниатюры
Python ping true\false  
0
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
15.12.2018, 20:51
Цитата Сообщение от pazurs Посмотреть сообщение
как отвечать со ссылкой на чью-то фразу
Просто выдели мышкой текст и появится всплывающая кнопка "Цитировать"
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 20:54
Цитата Сообщение от necroslider Посмотреть сообщение
[Не верно] Хост 192.168.99.11 со мной в одной сети, нет такого ип - результат 0
Цитата Сообщение от necroslider Посмотреть сообщение
Как мы видим, если хост в одной подсети, то даже если он не существует возвращается 0
А точно уверены что он действительно не существует?
0
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
15.12.2018, 20:58
Цитата Сообщение от Avazart Посмотреть сообщение
А точно уверены что он действительно не существует?
Более чем, так как это моя домашняя сеть.
Миниатюры
Python ping true\false  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 21:00
Хотя да, проверил действительно возвращает 0 когда узел недоступен.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 21:04
...
Миниатюры
Python ping true\false  
0
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
15.12.2018, 21:05
Цитата Сообщение от Avazart Посмотреть сообщение
Хотя да, проверил действительно возвращает 0 когда узел недоступен.
Так что пока в голову лезет только нормальный парсинг вывода пинга и с анализом происходящего, но почему-то есть ощущение что вопрос должен решаться как-то интересней)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.12.2018, 21:09
Можно посмотреть в сторону либы pyping и вообще искать по ключевым словам "ICMP ping"
0
 Аватар для leery_user
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
15.12.2018, 21:14
Нашел вот такую вот штуку: pingparser
Вообще еще можно по времени ответа мониторить, ведь если хост недоступен, он залипает дольше чем когда все ок, но это прям жуткие костыли.
Миниатюры
Python ping true\false  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2018, 21:14
Помогаю со студенческими работами здесь

Как без оператора if вывести True or False?
Пользователь вводит трехзначное число, программа выводит true, если число делится на 4 без остатка , и False если не делится, как это можно...

Если подставить while is True или while is False - код не работает
n = int(input()) while n: print(n % 10, end='') n //= 10 Что здесь означает while n? Если подставить while is True или...

Логической переменной t присвоить значение true или false
Логической переменной t присвоить значение true или false в зависимости от того, есть ли натуральное число k степенью 3 или нет

Написать функцию def, возвращающую то значение (True или False)
Нужно написать функцию, возвращающую то значение (True или False), которое среди значений ее аргументов x, y, z встречается чаще. Формат...

Проверка упорядоченности элементов списка по возрастанию с возвратом True или False
Здравствуйте, У меня задача проверить по возрастанию ли находятся элементы в списке или нет. Если да то возврат True если нет то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru