Yashvanth B Ответов: 2

Pinging IP address in Python in while loop дает возвращаемое значение 1 и 0 в альтернативе


Когда я пингую нижеприведенный IP-адрес с помощью os.system (), он пингует и дает значение ответа 0, если пинг успешен, иначе 1, когда он недоступен

но проблема заключается в том, что когда я добавляю, что в то время как если ip-адрес назначения недоступен, он также возвращает 0 и 1 альтернативным способом (после некоторой временной задержки)

если ip достижим, возвращает ли он непрерывность 0

Эту ссылку я попробовал в обоих подпроцессах.вызов обоих API дает один и тот же результат.

https://forum.inductiveautomation.com/t/script-to-ping-computer/16612/6 функция Python для тестирования ping

Что я уже пробовал:

import os
from time import sleep

def add():
    print("in add function")

def sub():
    print("in subtract function")

def ping():
    online = os.system("ping -n 1 192.168.0.9")
    if(online == 0):
         print("Avilabe with ",online)
         return True
    else:
         print("Ofline with ",online)
         return False

while True:
   add()
   sleep(0.5)
   if( ping()):
         sub()
    '''
    do other things if ping is successful
    '''
   sleep(0.5)
any alternative API to get return value when system pinging

2 Ответов

Рейтинг:
0

Richard MacCutchan

Возвращаемое значение берется из команды ping и будет зависеть от того, какой ответ будет получен командой. Это не имеет ничего общего с программированием на Python, но является функцией команды Windows ping. Если вы выполните следующие действия в командном окне для проверки:

ping -n 1 192.168.0.9
echo %ERRORLEVEL%

Переменная ERRORLEVEL дает результат предыдущей команды.


Yashvanth B

Привет спасибо за повтор то, что мне нужно, это если ping успешен, то подключитесь к серверу и выполните другую операцию, если это не удается, то попробуйте пинговать ip-адрес сервера до тех пор, пока сервер не будет доступен для u попробовал выше, но он дает те же значения любой альтернативный API в python, чтобы получить возвращаемые значения

Richard MacCutchan

Ping разработан не как функция API, а как метод ручной проверки состояния удаленного сайта. Вам нужно сделать еще несколько тестов на уровне командной строки, чтобы точно проверить, какое значение устанавливается для различных ситуаций. Как я уже сказал выше, это не имеет никакого отношения к Python.

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

0x01AA

Насколько я знаю (и делаю это сам), ping будет использоваться много раз, чтобы проверить, доступен ли ip-адрес. Во всяком случае, 5.

Richard MacCutchan

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

Richard MacCutchan

Я провел несколько тестов локально, и значение, возвращаемое командой ping, недопустимо. Он возвращает 0 независимо от того, доступен сайт или нет.

Рейтинг:
0

OriginalGriff

Это локальные IP - адреса, поэтому мы не можем дублировать вашу точную систему-что означает, что мы не можем тестировать ваш код при тех же обстоятельствах, что и вы, и это может быть уместно.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!