Есть бинарный Linux-файл с закрытым исходным кодом, который читает входные данные из стандартного ввода. Моя цель - автоматизировать отправку входных данных с помощью Python через канал.
Я создал именованный канал и запускаю двоичный файл с перенаправленным stdin на этот канал.
Мое приложение на Python пишет в этот канал. Мне нужно отправить первые входные данные в двоичный файл, получив этот вход, двоичный файл обновляет свое состояние и ожидает другого второго входных данных. Поэтому я отправляю вторые входные данные.
f = open(pipe,'w')
f.write(inputdata1)
f.flush()
f.write(inputdata2)
f.close()
Проблема в том, что когда я пишу в канал, как указано выше, бинарный файл получает inputdata1 + inputdata2 за один раз на первом этапе.
Инвестирование двоичного файла в gdb показывает, что двоичный файл читает пользовательский ввод через функцию библиотеки C read
.
Я много пробовал и есть обходной путь (может быть, это не обходной путь, но как это должно быть, но я не знаю). Добавление сна после отправки первых входных данных решило мою проблему. time.sleep(1)
Мой первый вопрос: как и почему time.sleep(1)
работает так, как я ожидал. Это связано с тем, что time.sleep(1)
вызывает переключение контекста? Или мне действительно нужно подождать?
Мой второй вопрос касается функции библиотеки C read
. Предположим, что переданный параметр count равен n, а внутри канала меньше n байтов, и все. Как и когда read решает вернуться обратно к абоненту? Ответ этого может быть на самом деле ответом на мою проблему.