मुझे एक पायथन प्रोग्राम की आवश्यकता है जिसका उपयोग मैं एसएसएच कनेक्टिविटी के लिए रिमोट सर्वर को मतदान करने के लिए कर रहा हूं और यह उपलब्ध होने पर सूचित करता है। मैं वर्तमान में paramiko का उपयोग कर ऐसा कर रहा हूँ; कनेक्ट करने का प्रयास करें, अगर विफलता, सफलता या अधिकतम रिट्री तक प्रतीक्षा करें और पुनः प्रयास करें। यह काम करता है, लेकिन यह थोड़ा उलझन में है। इसके अलावा paramiko या तो एक त्रुटि को जोड़ने या फेंकने लगता है, इसलिए एकमात्र तरीका यह है कि मैं ऐसा करने के लिए देख सकता था एक कोशिश/ब्लॉक को छोड़कर, बुरा, बुरा, बुरा। यहां विधि है:एसएसएच उपलब्धता का परीक्षण करने के लिए सुरुचिपूर्ण तरीका
def check_ssh(self, ip, user, key_file, initial_wait=0, interval=0, retries=1):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sleep(initial_wait)
for x in range(retries):
try:
ssh.connect(ip, username=user, key_filename=key_file)
return True
except Exception, e:
print e
sleep(interval)
return False
इससे कहीं अधिक सुरुचिपूर्ण समाधान होना चाहिए। परमिको मेरी एसएसएच लाइब्रेरी पसंद है लेकिन यहां किसी भी सुझाव के लिए खुला हूं।
स्पष्ट करने के लिए, मैं/कोशिश का उपयोग कर कोड निष्पादन के सामान्य प्रवाह को नियंत्रित करने के एक साधन के रूप को छोड़कर बचना चाहते हैं - यह इस तरह बुरा होस्ट कुंजी, अमान्य उपयोगकर्ता आदि
'ऐसा करने का एकमात्र तरीका मैं कोशिश कर रहा था/ब्लॉक को छोड़कर बुरा, बुरा, बुरा' बुरा क्यों है? –
आप निश्चित रूप से सही हैं कि 'अपवाद' को पकड़ना बुरा है। हालांकि, paramiko द्वारा फेंक दिया विशिष्ट अपवाद पकड़ना बुरा नहीं है। –
वास्तव में, लेकिन कार्यक्रम प्रवाह के साधन के रूप में अपवाद हैंडलिंग का उपयोग करना आम तौर पर खराब है: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Exceptions – nightowl