Я уже использую клиент P4V, и все в порядке, никаких ошибок подключения.
Ошибка: у меня возникают некоторые ошибки SSL, когда я пытаюсь выполнить команду p4 из Python. И это случайно, если я повторно запускаю скрипт, ошибка не возникает каждый раз
От клиента вывод:
Ошибка получения SSL.\nчтение: Операция выполнена успешно: WSAECONNRESET
Из журналов на стороне сервера у меня есть:
Соединение с 90.XX.XX.93:53929 прервано. Получение SSL не удалось. чтение: сброс соединения по узлу: сброс соединения по узлу
После le P4 Connection с p4.connect()
я запускаю команду p4.run_trust()
, и результат кажется нормальным.
Доверие уже установлено
Эта ошибка возникает при выполнении p4 fetch
из p4 edit myfile
Конфигурация
Я запускаю свой скрипт Python с того же компьютера, на котором работает клиент P4V. Я использую ту же конфигурацию (пользователь, рабочая область, url+port > ssl:p4.our-url.domain:1666). Ошибка SSL произошла с запуском клиента P4V или без него. SSL-сертификат был создан во время установки и настройки Perforce Server. За нашим поддоменом p4.our-domain нет сервера apache, поэтому я не могу проверить SSL-сертификат с помощью онлайн-проверки SSL (мои сетевые знания там достигают своего предела)
Когда я делаю p4 info
, появляется «адрес равноправного узла», в основном мой IP со случайно сгенерированным портом (53929). Что это за порт? Нужно ли устанавливать фиксированный порт и перенаправлять на мой компьютер, на котором запущен скрипт?
У вас есть идеи, откуда эта ошибка? Это плохая конфигурация сервера (странно, потому что каждый клиент p4v в офисе работает). Нужно ли устанавливать и распространять новый сертификат для всех пользователей скрипта P4Python?
Питон 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()
непосредственно перед любым P4.run_*method*()
и закрыть его после. Вместо того, чтобы ждать тайм-аута, чтобы перезапустить соединение.