Resuming read after timeout
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- rust
- Área
- cli, operating-systems
Línea de trabajo
Comienza examinando rexpect::exp_eof y la ruta reader.try_read utilizada por drain_read_buffer, centrándote en lo que permanece almacenado en el búfer después de un tiempo de espera. Define qué debería devolver «leer todo lo que esté disponible después de 100ms» y cómo las lecturas posteriores deberían evitar devolver de nuevo la salida anterior; valida el comportamiento con un proceso PTY que produzca salida de forma incremental.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I have a
pub session: Option<Arc<Mutex<PtySession>>>,
I want to get the existing output of a process after 100ms. This seemed to work at first:
let output = {
let session_mutex = self.session.as_mut().ok_or(anyhow!("No session"))?;
let mut session = session_mutex.lock()?;
match session.exp_eof() {
Ok(output) => output,
Err(e) => {
match e {
rexpect::error::Error::Timeout { got, .. } => got
.replace("`\\n`\n", "\n")
.replace("`\\r`", "\r")
.replace("`^`", "\u{1b}"),
_ => return Err(e.into()),
}
}
}
};
but then I realized that session.exp_eof does not drain the buffer if a timeout is reached, meaning that if I try to read the next chunk, the entire output up to this point is going to be returned yet again. This seems to work:
fn drain_read_buffer(&mut self) -> ZammResult<String> {
let mut output = String::new();
if let Some(session) = self.session.as_mut() {
let reader = &mut session.lock()?.reader;
while let Some(chunk) = reader.try_read() {
output.push(chunk);
}
}
Ok(output)
}
...
let mut output = String::new();
loop {
sleep(Duration::from_millis(100));
let new_output = self.drain_read_buffer()?;
if new_output.is_empty() {
break;
}
output.push_str(&new_output);
}
But I'm wondering, is there a better way to implement "read whatever is available after 100ms" than this?
- Lenguaje dominante
- Rust
- Estrellas
- 391
- Forks
- 69
- Merge medio
- 1 d 34 min
- PR fusionados (30 d)
- 2
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rust-cli/rexpect
-
Strict output expectations Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Disabling bracketed paste mode Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
-
Configurable sleeps Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
Todos los issues de rust-cli/rexpect
Issues similares
-
Replayed reasoning items send "content": null, which the Responses API schema does not permit Abiertobug CLI custom-model
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
rust-bitcoin/rust-bitcoin#6930 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fulcrumgenomics/ferro-hgvs#2251 ·
-
Missing examples for `Allocator` AbiertoA-allocators A-docs C-enhancement T-libs
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100