Этот вопрос связан с How do we handle Python xmlrpclib Connection Refused?Безопасный способ подключения к RPC серверу
Когда я пытаюсь использовать следующий код, с моей RPC сервер вниз, _get_rpc() возвращает значение False, и я хорошо идти. Однако, если сервер работает, он не работает с неизвестным методом. Он пытается выполнить .connect() на удаленном сервере? Как я могу обойти это, когда мне нужно было использовать .connect(), чтобы определить, работал ли возвращенный прокси (см. Соответствующий вопрос)?
import xmlrpclib
import socket
def _get_rpc():
try:
a = xmlrpclib.ServerProxy('http://dd:[email protected]:9001')
a.connect() # Try to connect to the server
return a.supervisor
except socket.error:
return False
if not _get_rpc():
print "Failed to connect"
Вот вопрос:
[email protected]:~/code/dd$ python xmlrpctest2.py
Failed to connect
[email protected]:~/code/dd$ supervisord -c ~/.supervisor # start up RPC server
[email protected]:~/code/dd$ python xmlrpctest2.py
Traceback (most recent call last):
File "xmlrpctest2.py", line 13, in <module>
if not _get_rpc():
File "xmlrpctest2.py", line 7, in _get_rpc
a.connect() # Try to connect to the server
File "/usr/lib/python2.6/xmlrpclib.py", line 1199, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python2.6/xmlrpclib.py", line 1489, in __request
verbose=self.__verbose
File "/usr/lib/python2.6/xmlrpclib.py", line 1253, in request
return self._parse_response(h.getfile(), sock)
File "/usr/lib/python2.6/xmlrpclib.py", line 1392, in _parse_response
return u.close()
File "/usr/lib/python2.6/xmlrpclib.py", line 838, in close
raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: 'UNKNOWN_METHOD'>
Спасибо, это работает хорошо. Код просто нуждается в обновлении с другим оператором except для первой попытки, чтобы избежать повышения исключения отступа, но в противном случае работает. И спасибо за N.B # 2, я проверю, поддерживает ли супервизор это. –
@ Энтони Хискокс: исправь это спасибо за замечание, и рад, что это поможет :) – mouad
отличная экономия времени; xmlrpclib должен обрабатывать это – n611x007