Я хочу реализовать следующий сценарий:
- [Тема 1] Запустить сервер через
subprocess
в отдельном потоке Python # 2. - [Тема 2] Снять блокировкупока в выводе сервера не появится конкретная строка.
- [Поток 1] Попытайтесь установить блокировку и подождите, пока она не будет снята потоком # 2.
Некоторый соответствующий код:
self._proc = subprocess.Popen([self._bin] + self._args, shell=False, bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while self._proc.poll() is None:
line = self._proc.stderr.readline()
if 'Ready for connections' in line:
break
self._lock.release()
Но проблема в том, что он не работает внутри pytest.Если я запускаю тест с аргументом -s
, он работает.В противном случае он просто навсегда зависает при получении блокировки в другом потоке.
Также я пытался использовать приборы with capsys.disabled()
и with capfd.disabled()
, но безуспешно.
Есть ли простой способ отключитьзахват только выходов подпроцесса?Или он должен работать "из коробки", и, может быть, у меня просто есть какой-то другой недостаток в коде?