Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Astuto

Funçao de PING

Mensagens Recomendadas

Astuto    0
Astuto

Boas,

Estava a fazer uma função para pingar um host então o que acontece:
 

def pingx(myip):

    checkState = os.system("ping -n 1 %s" % myip)

    if checkState == 0:
        return 1
    else:
        return 0

O que me está a contecer é que se a máquina estiver up, ele devolve 0 e se estiver down devolve o 1 quando precisamente era o contrario. A pergunta é, como e que sei o que ele guarda na variável após efectuar o comando do ping -n 1..... na consola windows se tiver on ele devolve um reply se tiver off e um timeout. Como e que ele traduz o ping. 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo    223
pwseo

Astuto,

Isso deve-se ao facto de estares a utilizar ferramentas do sistema para fazer o ping. Em linux o habitual é devolver 0 quando tudo está bem e outro número quando algo correu mal, servindo o número para identificar o tipo de erro. Possivelmente a implementação em Windows poderá ser diferente, daí o teu problema.

Podes sempre detectar a plataforma no teu código e interpretar os resultados consoante a mesma.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Nilo Menezes    3
Nilo Menezes

Testei no Windows e funcionou normalmente.

Você pode testar na linha de comando e pedir para exibir o valor de retorno com:

echo %ERRORLEVEL%

Quando a máquina está ativa, retorna 0

Quando a máquina não responde, retorna 1.

Testado no Windows 10 com Python 3.5.1:

C:\Users\Utilisateur>python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> def pingx(myip):
...     checkState = os.system("ping -n 1 %s" % myip)
...     if checkState == 0:
...         return 1
...     else:
...         return 0
...
>>> print(pingx("www.google.com"))

Pinging www.google.com [2a00:1450:400e:805::2004] with 32 bytes of data:
Reply from 2a00:1450:400e:805::2004: time=28ms

Ping statistics for 2a00:1450:400e:805::2004:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 28ms, Average = 28ms
1
>>> print(pingx("wxxxww.google.com"))
Ping request could not find host wxxxww.google.com. Please check the name and tr
y again.
0

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.