172 похожих чатов

Товарищи, опять прошу помощи со чтением stderr дочернего процесса происходит следующее: стартую

процесс и забираю его stderr в BufReader:
world.app_handler = Some(
Command::new(&world.app_bin)
.stderr(Stdio::piped())
.spawn()
.unwrap(),
);
let app_stderr = world.app_handler.as_mut().unwrap().stderr.take().unwrap();
world.app_reader = Some(BufReader::new(app_stderr));

далее в этом же методе я с помощью такой функции ожидаю пока запущенный процесс напишет что-то в консоль и после этого продолжаю, этот момент работает исправно:
pub fn wait_process_output(
reader: &mut BufReader<ChildStderr>,
output: Vec<(String, u16)>,
) -> Result<(), String> {
let mut process_output = String::new();
loop {
match reader.read_line(&mut process_output) {
Err(e) => {
return Err(format!("Unable to read output: {}", e));
}
Ok(_) => {
// processing here
}
};
}
}

проблема начинается когда некоторое время спустя в другом методе я опять вызываю
wait_process_output на world.app_reader: он просто бесконечно ждет , BufReader ничего не считывает
в чем может быть проблема? как так получается, что BufReader портится?

наверное тут еще стоит отметить, что происходит это все в тестах на cucumber, соответственно первый раз метод wait_process_output вызывается в given, а второй раз в then в рамках одного сценария
не уверен что это важно, но все же

1 ответов

19 просмотров
Alex- Автор вопроса

UPD обнаружил, что буфер читается, но не так как я ожидал по всей видимости если в stderr было положено что-то ДО того как я вызвал read_line, то это считано не будет а я думал что эти данные просто складируются в буфер до вызова read_line либо до исчерпания буфера получается что нет способа получить то, что процесс вывел в stderr до того как я стал ждать с помощью read_line?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта