【发布时间】:2012-12-15 17:19:32
【问题描述】:
我对 Python 完全不熟悉,但我有一段代码需要修复。它来自 Sublime Text 2 的 SublimeXdebug 插件,这是唯一一个使用 Sublime Text 进行 PHP 调试的插件。该插件是用 Python 编写的,更具体地说,是用 Python 2.6 或更早版本编写的,而运行该插件的系统 (Ubuntu 12.04) 仅支持 Python >= 2.7。但是,插件/Sublime Text 开发人员似乎设法“模拟”了 Python 2.6,因为当我在插件代码中插入 print sys.version 时,它会报告 Python 2.6.6。它本可以帮助其他一些插件,但对 SublimeXdebug 没有帮助:
Traceback (most recent call last):
File ".\threading.py", line 532, in __bootstrap_inner
File ".\threading.py", line 484, in run
File "./Xdebug.py", line 321, in thread_callback
protocol.accept()
File "./Xdebug.py", line 137, in accept
raise(ProtocolConnectionException, x)
ProtocolConnectionException
有问题的一段代码(可能不是唯一的)是这样的:
def accept(self):
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if serv:
try:
serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serv.settimeout(1)
serv.bind(('', self.port))
serv.listen(1)
self.listening = True
self.sock = None
except Exception, x:
raise(ProtocolConnectionException, x) # line 137 <------------
while self.listening:
try:
self.sock, address = serv.accept()
self.listening = False
except socket.timeout:
pass
if self.sock:
self.connected = True
self.sock.settimeout(None)
else:
self.connected = False
self.listening = False
try:
serv.close()
serv = None
except:
pass
return self.sock
else:
raise ProtocolConnectionException('Could not create socket')
(对于那些建议在 .deb 中下载 2.6 版本的 Python,解压缩,然后将 usr/lib/python2.6 移动到 {sublime text folder}/lib 的人,我已经尝试过了,但没有帮助。)
那么问题的根源可能在于 Python 版本不匹配或其他原因吗?
编辑:
如果我将第 137 行更改为 raise,它会说:
Traceback (most recent call last):
File ".\threading.py", line 532, in __bootstrap_inner
File ".\threading.py", line 484, in run
File "./Xdebug.py", line 321, in thread_callback
File "./Xdebug.py", line 132, in accept
File "<string>", line 1, in bind
error: [Errno 98] Address already in use
第 132 行是serv.bind(('', self.port))。
【问题讨论】:
-
他们不需要“模仿”Python 2.6。 Sublime Text 可能只是捆绑了它自己的“干净”的 Python 私有安装,而不是依赖于系统提供的安装。因此,您看到的错误可能不是由 Python 版本不匹配引起的。
-
你确定有什么东西在“模拟”Python 2.6,而不是真正使用 2.6 吗?
sys.executable是什么?另外,如果将第 137 行的raise(Protocol....)更改为raise,会发生什么情况?这将引发最初的异常(好像根本没有 try: except: block),我们将能够看到问题到底是什么。 -
@PhilFrost 是的,我检查了,安装的版本是 2.7,
/usr/lib/python2.6文件夹几乎是空的,不像/usr/lib/python2.7,它看起来像一个成熟的 Python 文件和文件夹家族。而sys.executable在此 Stack Overflow 页面上仅出现一次,在您的评论中:) -
@PhilFrost 更新了问题以引用它产生的输出,如果该行是
raise。
标签: php python sockets networking sublimetext2