Ping Senaryo - eğer tepki

oy
0

Sadece python öğrenmeye başladık olarak ben sadece birlikte / aşağı senaryoyu basit sunucu koymak çalışıyorum.

Aşağıda script ... ama çıkış kod bölümüne Sunucusu it Down alınamıyor. if response == 0Ben Hedefe ulaşılamıyor cevabı toplayıp tahmin ediyorum ve yanlış pozitif yapıyor.

Bunu aşmanın ne yapabilirim?

# Server up/down Script

import os

hostname1 = input ( Please Enter IP Address: )

response = os.system(echo ping -a -c 1  + hostname1)

#and then check the response...
if response == 0: # This will check the host repeatedly
    print (hostname1, '\033[1;32m [ **SERVER ALIVE** ] \033[1;m')
    # As long as the server is up it will print the UP response in green text
else:
    print(hostname1, '[ **SERVER DOWN** ]')
print( 30 * -)
Oluştur 07/11/2018 saat 23:49
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

response = os.system("echo ping -a -c 1 " + hostname1)

Eğer yürütme sistem komutu sadece bir echosadece "yazdırır, hangi ping -a -c 1 <hostname>" stdout'a ve sonra 0'a Gerçekten herhangi ping yapmaz dönün. Bir terminalde direkt sistem komutlarını çalıştıran ve geri dönüş değeri kontrol ederek test edebilirsiniz:

$ echo ping -a -c 1 8.8.8.8 
ping -a -c 1 8.8.8.8
$ echo $?  # returns 0
$ echo ping -a -c 1 <some.invalid.ip> 
<some.invalid.ip>
$ echo $?  # still returns 0

Sen kaldırmak gerekir echove sadece yap:

response = os.system("ping -a -c 1 " + hostname1)

Hangi doğru sonucu dönmelidir:

# VALID IP

>>> response = os.system("ping -a -c 1 8.8.8.8")
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.80 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.803/5.803/5.803/0.000 ms
>>> print(response)
0

# INVALID IP

>>> response = os.system("ping -a -c 1 5.5.5.5")
PING 5.5.5.5 (5.5.5.5) 56(84) bytes of data.

--- 5.5.5.5 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

>>> print(response)
256

Sistem çağrıları için, ben kullanmayı tavsiye subprocessiçermektedir yerine paket, subprocess.runkomut çıktısını yazdırmak ve ardından komutun dönüş kodunu içeren bir nesne döndürebilir işlevi.

# VALID IP

>>> response = subprocess.run(["ping", "-c", "1", "8.8.8.8"])
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.19 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.194/5.194/5.194/0.000 ms
>>> response.returncode
0

# INVALID IP

>>> response = subprocess.run(["ping", "-c", "1", "5.5.5.5"])
PING 5.5.5.5 (5.5.5.5) 56(84) bytes of data.

--- 5.5.5.5 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

>>> response.returncode
1

Eğer çıktısını gizlemek istiyorsa pingkomutu geçilmesinin mümkün subprocess.PIPEiçin stdoutbir subprocess.run:

>>> response = subprocess.run(["ping", "-c", "1", "5.5.5.5"], stdout=subprocess.PIPE)
>>> response.returncode
1

Kullanımına öneri subprocessnot edilir os.systemdoc :

Altişlem modülü yeni süreçleri yumurtlama ve onların sonuçlarını almak için, daha güçlü olanaklar sağlar; bu modül kullanarak bu fonksiyonu kullanarak tercih edilir. Bkz altişlem Modülü ile değiştirilmesi Yaşlı Fonksiyonlar bölümünde alt işlemi bazı yararlı tarifleri belgelerine

Cevap 08/11/2018 saat 00:23
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more