पिंग स्क्रिप्ट - अगर प्रतिक्रिया

वोट
0

मैं बस के रूप में मैं सिर्फ अजगर जानने के लिए शुरू कर दिया है एक साथ एक सरल सर्वर ऊपर / नीचे स्क्रिप्ट डाल करने के लिए कोशिश कर रहा हूँ।

नीचे स्क्रिप्ट है ... लेकिन मैं नहीं यह उत्पादन के लिए सर्वर डाउन कोड की धारा मिल सकती है। if response == 0मेरा अनुमान है कि गंतव्य पहुंचा नहीं जा सकता प्रतिक्रिया उठा और एक झूठी सकारात्मक रही है।

मैं इस के आसपास पाने के लिए क्या कर सकते हैं?

# 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 * -)
07/11/2018 को 23:49
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

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

प्रणाली आदेश आप को क्रियान्वित कर रहे हैं सिर्फ एक है echoजो सिर्फ प्रिंट होगा ", ping -a -c 1 <hostname>" stdout करने के लिए, और फिर 0. यह वास्तव में किसी भी pinging नहीं करता है लौटने। आप एक टर्मिनल पर सीधे प्रणाली आदेशों चल रहा है और वापसी मान की जाँच करके यह परीक्षण कर सकते हैं:

$ 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

आप निकाल देना चाहिए echoऔर सिर्फ कार्य करें:

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

कौन सा सही परिणाम लौट जाना चाहिए:

# 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

सिस्टम कॉल के लिए, मैं का उपयोग करने की सलाह देते हैं subprocessजिसमें शामिल पैकेज के बजाय, subprocess.runसमारोह है कि आदेश उत्पादन मुद्रित और फिर एक वस्तु आदेश की वापसी कोड युक्त लौट सकते हैं।

# 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

आप के उत्पादन को छिपाने के लिए चाहता है तो pingआदेश, आप पास कर सकते हैं subprocess.PIPEकरने के लिए stdoutकी subprocess.run:

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

उपयोग करने के लिए सिफारिश subprocessमें विख्यात है os.systemदस्तावेज़ :

उपप्रक्रिया मॉड्यूल नई प्रक्रियाओं को उत्पन्न करने और उनके परिणामों को पुन: प्राप्त करने के लिए और अधिक शक्तिशाली सुविधाएं प्रदान करता है; कि मॉड्यूल का उपयोग कर इस समारोह का उपयोग कर बेहतर है। देखें उपप्रक्रिया मॉड्यूल के साथ की जगह पुराने कार्य में खंड उपप्रक्रिया कुछ उपयोगी व्यंजनों के लिए प्रलेखन

08/11/2018 को 00:23
का स्रोत उपयोगकर्ता

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