Двоичный файл ожидает, что несколько входных данных из канала pipe и pipe написаны Python. Зачем необходим сон между операциями записи? - PullRequest
0 голосов
/ 18 апреля 2019

Есть бинарный 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 решает вернуться обратно к абоненту? Ответ этого может быть на самом деле ответом на мою проблему.

...