Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python脚本中调用Python交互式解释器_Python_While Loop_Xmlrpclib_Python Interactive - Fatal编程技术网

从Python脚本中调用Python交互式解释器

从Python脚本中调用Python交互式解释器,python,while-loop,xmlrpclib,python-interactive,Python,While Loop,Xmlrpclib,Python Interactive,是否有任何方法可以从脚本中启动Python解释器,方式类似于仅使用Python-i,以便保留当前脚本中的对象/名称空间等?不使用python-i的原因是脚本初始化到XML-RPC服务器的连接,如果出现错误,我需要能够停止整个程序。在有有效输入之前,我不能循环,因为很明显,我不能这样做: #!/usr/bin/python -i # -*- coding: utf-8 -*- import xmlrpclib # Create an object to represent our server

是否有任何方法可以从脚本中启动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
在输出回溯后立即启动解释器,因此我不得不调用交互式解释器-替换脚本的执行以保持服务器连接-从脚本中读取错误消息吗?:)


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

我终于让它工作了

基本上,我将整个
try
/
除了
/
else
子句放在
中,而True:
循环中,
else
套件是
break
语句,而
套件的结尾是
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...
多谢各位


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

看起来像是C语言的一个端口?是什么创建(或试图创建)了
xmlrpclib.Server的新实例,并在成功时返回True,失败时返回False?@Bushman:不,Python不是这样工作的。在Python中,赋值不会返回任何内容。哇,我似乎从一个非常古老的源代码中获得了它的原始版本。主xmlrpclib对象显然是ServerProxy。我看看是否有效。您是否尝试过在顶部添加
import socket
?PS:如果出现异常,函数根本不返回任何内容:)