Я хочу запустить API в моем скрипте Python, подождать, пока он не запустится правильно (он выведет «API ready»), а затем отправить ему несколько запросов.Вот что я попробовал:
api_cmd = "python3 api.py"
# Begin by starting API.
api_process = subprocess.Popen(shlex.split(api_cmd), stdout=subprocess.PIPE)
subprocess_pids.append(api_process.pid)
# Wait until API has started
print("Starting API...")
while True:
line = api_process.stdout.readline().decode('ascii')
if "API ready" in line:
print("API started! Wait 3 more seconds...")
time.sleep(3)
break
else:
print("Line: {}".format(line))
Это работает, если я установил PYTHONUNBUFFERED = 1 в качестве переменной окружения.Однако это имеет нежелательные последствия:
- Выводит выходные данные подпроцессов в оболочке, в которой я запускаю этот скрипт.
- Я не могу прочитать последнюю строку (которая говорит "API"готов "), но только предыдущий в качестве последней строки не имеет символа новой строки.
Может кто-нибудь сказать мне, как исправить это поведение?Я попробовал read () вместо readline (), но это как-то не сработало.
Вывод не из-за оператора print в цикле while, так как он не начинается с «Line:» итакже продолжается после завершения цикла while.Кроме того, вывод, прочитанный readline (), кажется, отличается от того, что напечатано в оболочке.