首页 > 解决方案 > Pydev 显示用于 Jython 代码分析的“未定义变量”

问题描述

我已经使用 Eclipse、Jython 和 Pydev 很长时间了。在新版本到来时进行升级。直到最近,当 Pydev 代码完成开始将常见项目(如 dir 或 print)标记为“未定义变量”时,一切都运行良好。但程序运行正确。

错误日志显示:

'python 客户端仍然没有连接回 eclipse java vm(将重试..)'
'尝试:5 次中的 2 次失败,再次尝试......(套接字连接仍然为空)'

以及更多尝试 5 次中的 5 次

'连接到 python 进程时出错(最有可能的失败原因是防火墙阻塞......配置错误的网络)'

此外,尝试创建实时 jython 控制台 CTRL+ALT+ENTER 会出现以下错误:

“创建交互式控制台”遇到问题 初始化控制台时出错。连接到控制台时出现意外错误。未能从 pydevconsole 接收到合适的 Hello 响应。收到的最后一条消息:控制台已经以值退出:等待答案时为 1。

我花了很多时间在这里和其他地方寻找答案,其中包括检查建议:

混合 32/64 位安装;防火墙问题;IPV4 偏好;本地主机条目;路径问题和其他问题:到目前为止,我检查过的所有问题都没有成功。

软件是 Windows 10、Eclipse 4.21.0、Pydev 9.1.0.2021、Java JDK 11.0.13、Jython 2.7.2

对于这个问题的任何进一步帮助,我将不胜感激。

非常感谢

标签: eclipsejythonpydev

解决方案


好吧,您会收到该消息,因为 PyDev 确实生成了一个 shell 并与它通信以收集代码完成结果,交互式控制台也是如此。

现在,在这两种情况下,您的用例似乎都阻止了套接字通信(如消息所述,通常的罪魁祸首是一些防火墙 - 或者可能是防病毒 - 或一些网络配置错误)。

不幸的是,我真的很难诊断它,因为它几乎依赖于机器(我只能说我在这里检查了一些东西并且 Jython 运行良好,所以问题在于你的机器上的一些错误配置)。

我实际上有计划停止要求套接字通信(用于从 shell 获取完成)并使用 stdin/stdout (https://www.brainwy.com/tracker/PyDev/1183),但这仍然没有完成。

由于 Jython 确实为您运行,您可以尝试创建一个简单的服务器来验证连接是否有效。

即:创建一个echo_server.py

import socket

if __name__ == '__main__':
    HOST = '127.0.0.1'
    PORT = 65432
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    print('Connected by', addr)
    data = conn.recv(1024)
    conn.sendall(data)
    print('Echo server finished')

和一个client.py

import socket

if __name__ == '__main__':
    HOST = '127.0.0.1'
    PORT = 65432
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)
    
    print('Received %r' % (data,))

然后运行服务器部分,然后运行客户端部分并检查它是否适合您。


推荐阅读