Вызвать интерактивный интерпретатор Python из скрипта Python - PullRequest
0 голосов
/ 19 июня 2010

Есть ли способ запустить интерпретатор Python из скрипта, аналогично тому, как просто использовать python -i, чтобы сохранить объекты / пространство имен и т. Д. Из текущего скрипта?Причина, по которой не используется python -i, заключается в том, что скрипт инициализирует соединение с сервером XML-RPC, и мне нужно иметь возможность остановить программу whole в случае ошибки.Я не могу выполнить цикл, пока не получим действительный ввод, потому что, очевидно, я не могу сделать что-то вроде этого:

#!/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 ]

2 голосов
/ 19 июня 2010

Вы пытались прочитать сообщение об ошибке? :)

= - это присвоение, вместо него требуется оператор сравнения ==.

0 голосов
/ 20 июня 2010

Ну, наконец-то я получил его на работу.

По сути, я поместил все предложение 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...

Большое спасибо!

... и мне нужно подождать еще один день, чтобы принять это ...

...