Вызвать интерактивный интерпретатор Python из скрипта Python
Есть ли способ запустить интерпретатор Python из скрипта, подобно тому, как просто python -i
чтобы объекты / пространство имен и т. д. из текущего скрипта были сохранены? Причина неиспользования python -i
в том, что скрипт инициализирует соединение с сервером XML-RPC, и мне нужно иметь возможность остановить всю программу в случае ошибки. Я не могу выполнить цикл, пока не получим действительный ввод, потому что, очевидно, я не могу сделать что-то вроде этого
#!/usr/bin/python -i
# -*- coding: utf-8 -*-
import xmlrpclib
# Create an object to represent our server.
server_url = str(raw_input("Server: "))
while not server = xmlrpclib.Server(server_url):
print 'Unable to connect to server. Please try again'
else:
print 'Xmlrpclib.Server object `__main__.server\' of URL `', server_url, "' created"
break
# Python interpreter starts...
так как:
% chmod u+x ./rpcclient.py
% ./rpclient.py
Traceback (most recent call last):
File "./rpcclient.py", line 8
while not server = xmlrpclib.Server(server_url):
^
SyntaxError: invalid syntax
>>>
К несчастью, python -i
запускает интерпретатор сразу после того, как он распечатывает трассировку, поэтому мне нужно как-то вызвать интерактивный интерпретатор - заменить выполнение скрипта, чтобы он сохранил соединение с сервером - из скрипта
2 ответа
Ну, наконец-то я получил его на работу.
В основном я поставил весь try
/except
/else
пункт в while True:
петля, с else
сюита break
заявление и конец except
сюита continue
заявление. В результате он теперь постоянно зацикливается, если пользователь вводит адрес, который не имеет полностью совместимого прослушивания сервера XML-RPC2. Вот как это оказалось:
#!/usr/bin/python -i
# -*- coding: utf-8 -*-
import xmlrpclib, socket
from sys import exit
# Create an object to represent our server.
#server = xmlrpclib.Server(server_url) and print 'Xmlrpclib.Server object `__main__.server\' of URL `', server_url, "' created"
server_url = str(raw_input("Server: "))
server = xmlrpclib.ServerProxy(server_url)
while True:
try:
server.system.listMethods()
except xmlrpclib.ProtocolError, socket.error:
print 'Unable to connect to server. Please try again'
server_url = str(raw_input("Server: "))
server = xmlrpclib.ServerProxy(server_url)
continue
except EOFError:
exit(1)
else:
break
print 'Xmlrpclib.Server object `__main__.server\' of URL `', server_url, "' created"
# Python interpreter starts...
Большое спасибо!
... и я должен ждать еще один день, чтобы принять это...
Вы пытались прочитать сообщение об ошибке?:)
=
это назначение, вы хотите оператор сравнения ==
вместо.