-2

有没有办法从脚本中启动 Python 解释器,其方式类似于仅使用python -i以便保留当前脚本中的对象/命名空间等?不使用的原因是脚本初始化了与 XML-RPC 服务器的连接,如果出现错误python -i,我需要能够停止整个程序。在有有效输入之前我不能循环,因为显然我不能做这样的事情:

#!/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在它打印出回溯后立即启动解释器,所以我不得不从脚本中调用交互式解释器 - 替换脚本的执行以保持服务器连接

4

2 回答 2

2

您是否尝试阅读错误消息?:)

=是赋值,你需要比较运算符==

于 2010-06-19T14:39:03.527 回答
0

好吧,我终于让它工作了。

基本上,我把整个try//子句放在一个循环中,套件是一个语句,套件的结尾是一个语句。结果是,如果用户输入的地址没有完全兼容的 XML-RPC2 服务器侦听,那么它现在会不断循环。结果是这样的:exceptelsewhile True:elsebreakexceptcontinue

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

非常感谢你!

......我必须再等一天才能接受这个......

于 2010-06-20T13:04:21.700 回答