HTTP Exception elkapása- Python

+1 vote
asked Apr 9, 2013 in IRF tantárgy by anonymous  

wbemcli-vel szeretnék csatlakozni egy távoli klienshez Pythonban. Ha azon nincs bekapcsolva a sfcb, akkor egy Http Exception érkezik : (Couldn't connect to server). Hogyan lehetne ezt elkapni?
Próbálkoztam try-except-el elkapni HTTPExceptiont de nem működik...
(A HTTPException-et a http.client-ből importáltam be)

commented Apr 9, 2013 by nadudvarigy (68 points)  
Szia!

Tudsz mutatni kódot, hogy hogyan próbálkozol?
commented Apr 9, 2013 by anonymous  
try:
    alma=subprocess.check_output("wbemcli -nl gc 'http://meres:LaborImage@192.168.149.133:5988/root/cimv2:CIM_OperatingSystem'",shell=True)
    
except (HTTPException,subprocess.CalledProcessError):
    print("catch ág")

print(alma)
print("vege")

ugyanezt próbáltam subprocess.check_output helyett os.popen()-el is.

Kimenet:
*
* wbemcli: Http Exception: Couldn't connect to server
*
b''
vege

1 Answer

0 votes
answered Apr 9, 2013 by nadudvarigy (68 points)  

Az említett kivételt nem a Python dobja, hanem a wbemcli, ezért nem is tudod a Python try-except kivételkezeléssel elkapni. Ebben az esetben sajnos a a visszakapott parancshívás kimenetet mint stringet kell kezelni.

Pl. ha az alma változóba bekerül a "wbemcli: Http Exception: Couldn't connect to server", akkor az alma.find('Http Exception') -1-től eltérő értéket ad vissza, tehát volt egy ilyen exception.

try:
    alma = subproces.check ...
    if (alma.find('Http Exception') == -1):
        raise Exception('Http Exception')
    ...
except (Exception):
    print('Don''t panic')

Remélem érthető, és a kódot sem rontottam el.

commented Apr 10, 2013 by anonymous  
Érthető, köszi! Annyi van viszont, hogy a szöveget nem az alma-ba teszi bele, az egy üres string lesz, így megtalálni semtudom benne a kulcsszót. ha os.popen-el csinálom, akkor annak a visszatérését tudom vizsgálni, hogy ha nem 0, akkor nem piszkálom többet ezt a klienst. Az exception üzenet viszont igy is kimegy a kimenetre, mert tényleg azt igy nem sikerül elkapni.
Mennyire jelent problémát, ha a script helyes eredményt ad olyankor is ha nem létezik a kliens, vagy nincs rajta bekapcsolva a sfcb, de a konzolra potyogtat ilyen szövegeket?
commented Apr 10, 2013 by nadudvarigy (68 points)  
process_out = subprocess.Popen('wbem...', shell=True, stdout=subprocess.PIPE).stdout
    
line = process.readline()

Ezután a 'line'-ban lesz a kapott kimenet első sora.
commented Apr 11, 2013 by anonymous  
az stderr.subprocess.PIPE-ot is mellé kell írni, viszont utána tényleg nem jelennek meg a HTTPException-ök.
Köszi a segítséget!
commented Apr 13, 2013 by anonymous  
Sziasztok!
Nekem is ez a problémám.  Az oké, hogy így nem dob hibát a kimenetre, de a process_outból utána hogyan tudom kiszedni a számomra szükséges attribútumokat?
Köszi
commented Apr 14, 2013 by anonymous  
Ezt "az stderr.subprocess.PIPE -ot is mellé kell írni" , hogy érted.
Hova kell mellé írni?
Köszi
...