【发布时间】:2018-07-18 22:16:53
【问题描述】:
我已经在使用P4V客户端,一切正常,没有连接错误。
错误: 当我尝试从 Python 执行 p4 命令时出现一些 SSL 错误。 而且是随机的,如果我重新运行脚本,每次都不会抛出错误
从客户端,输出是:
SSL 接收失败。\n读取:操作成功:WSAECONNRESET
从服务器端日志中,我得到了:
来自 90.XX.XX.93:53929 的连接中断。 SSL 接收失败。读: 对等方重置连接:对等方重置连接
在使用p4.connect() 进行 P4 连接后,我运行了p4.run_trust() 命令,结果似乎还可以
信任已经建立
这个错误是由于p4 fetch,p4 edit myfile而导致的
配置
我正在从运行 P4V 客户端的同一台计算机上启动我的 python 脚本。我正在使用相同的配置(用户、工作区、url+port > ssl:p4.our-url.domain:1666)。无论是否启动 P4V 客户端,都会发生 SSL 错误。 SSL 证书是在 Perforce Server 安装和配置期间生成的。 我们的子域 p4.our-domain 后面没有 apache 服务器,所以我无法使用在线 SSL 检查器测试 SSL 证书(我的网络知识在那里达到了极限)
当我执行p4 info 时,有一个“对等地址”,基本上是我的 IP 和一个随机生成的端口 (53929)。这个端口是什么?我需要设置一个固定端口并重定向到我运行脚本的计算机吗?
您有任何想法该错误来自哪里吗?这是一个糟糕的服务器配置吗(奇怪的原因是办公室里的每个 p4v 客户端都可以工作)。 我是否需要为 P4Python 脚本的所有用户建立和分发新证书?
Python 3.5.4
PyOpenssl 18.0.0
P4Python 2017.2.1615960
非常感谢您的建议。
Sam Stafford 建议的回答
Sam 是对的,看来我超时了。我在脚本启动时打开 P4 连接并连接到服务器,然后在使用 p4 fetch/add/submit 之前启动处理以生成文件。这是在与服务器断开连接时重新连接的解决方法
# self.myp4 = P4() was created on init, files are added
submited = False
maxTry = 5
while not submited and maxTry > 0:
try:
reslist = self.p4.run_submit(ch)
except P4Exception as p4e:
print(str(self.p4.errors))
self.myp4.disconnect()
maxTry -= 1
self.myp4.connect()
submited = reslist is not None and len(reslist) > 0
如果您想保持连接打开,这很有效。我想避免超时的最好方法是在任何P4.run_*method*() 之前调用P4.connect() 方法并在之后关闭它。而不是等待超时重新启动连接。
【问题讨论】:
标签: python python-3.x ssl perforce p4python