Credo di capire, in generale, un modo di fare questo:In che modo eseguire lo streaming da un processo?
- Creare un
Command
- Usa
Stdio::piped()
per creare un nuovo paio di uscita flussi - Configura
command.stdout()
, ecommand.stderr()
- Spawn il processo
- Creare un nuovo thread e passare lo stderr e lo stdout ad esso < - ???
- Nel thread remoto, eseguire il polling continuo per l'input e scriverlo nel flusso di output.
- Nel thread principale, attendere il completamento del processo.
Suona bene?
Le mie due domande attuali:
C'è un modo più semplice che non comporta un 'filo leggere' per processo?
Se non c'è un modo più semplice,
Read::read()
richiede&mut self
; come lo si passa in una discussione remota?
Si prega di fornire esempi specifici di come lo streaming in realtà l'uscita, non solo consigli generici su come farlo ...
Per essere più precisi, ecco the default example of using spawn
:
use std::process::Command;
let mut child = Command::new("/bin/cat")
.arg("file.txt")
.spawn()
.expect("failed to execute child");
let ecode = child.wait()
.expect("failed to wait on child");
assert!(ecode.success());
Come può essere modificato l'esempio precedente per trasmettere l'output di child alla console, invece di aspettare solo un codice di uscita?
SO non è un generatore di tutorial. Hai un ** problema specifico **? –
In generale su SO, al fine di dare un punto di partenza alla conversazione, è meglio che l'OP (tu) fornisca come minimo un esempio di codice che mostri il problema e poi chieda come risolvere il problema. Ad esempio, potresti probabilmente cambiare il tuo "one way of doing this" in un esempio di codice. –
Accetto volentieri qualsiasi esempio di generazione di un processo a esecuzione prolungata e di output in streaming sulla console, con qualunque mezzo. – Doug