我已经在使用 P4V 客户端,一切都很好,没有连接错误。
错误: 当我尝试从 Python 执行 p4 命令时出现一些 SSL 错误。而且是随机的,如果我重新运行脚本,每次都不会抛出错误
从客户端,输出是:
SSL 接收失败。\n读取: 操作成功: WSAECONNRESET
从服务器端日志,我得到:
来自 90.XX.XX.93:53929 的连接中断。SSL 接收失败。读取:对等方重置连接:对等方重置连接
在 le P4 Connection with 之后p4.connect()
,我运行一个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
非常感谢您的任何建议。
山姆斯塔福德建议的答案
山姆是对的,看来我超时了。我在脚本启动时打开 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.connect()
方法是在 any 之前调用方法P4.run_*method*()
并在之后关闭它。而不是等待超时重新启动连接。