jb_alvarado
Lieutenant
- Registriert
- Sep. 2015
- Beiträge
- 595
Hallo mal wieder,
ich möchte einen Prozess mit offenem stdin starten, anschließend über einen Liste von Dateien loopen, die mit einem zweiten Prozess gelesen werden sollen. Dann soll der stdout vom zweiten Prozess in einem weiteren Loop gelesen werden und in den stdin vom ersten Prozess geschrieben werden.
In Python würde das in etwas so funktionieren.
Mein erster Rust-Versuch schaut so aus:
Das würde so auch gehen, allerdings brauche ich unbedingt statt
Hier habe ich ein Beispiel gefunden, wo in stdin geschrieben wird, aber das hat mir auch nicht viel geholfen.
Könnt ihr mir hier ein paar Tips geben?
ich möchte einen Prozess mit offenem stdin starten, anschließend über einen Liste von Dateien loopen, die mit einem zweiten Prozess gelesen werden sollen. Dann soll der stdout vom zweiten Prozess in einem weiteren Loop gelesen werden und in den stdin vom ersten Prozess geschrieben werden.
In Python würde das in etwas so funktionieren.
Mein erster Rust-Versuch schaut so aus:
Rust:
let mut enc_proc = Command::new("ffplay")
.args(enc_cmd)
.stdin(Stdio::piped())
.spawn()
.unwrap();
if let Some(mut enc_input) = enc_proc.stdin.take() {
for node in get_source {
let mut dec_proc = Command::new("ffmpeg")
.args(dec_cmd)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
.unwrap();
if let Some(mut dec_output) = dec_proc.stdout.take() {
io::copy(&mut dec_output, &mut enc_input).expect("Write to streaming pipe failed!");
dec_proc.wait()?;
let dec_output = dec_proc.wait_with_output()?;
if dec_output.stderr.len() > 0 {
println!(
"[Encoder] <red>{:?}</red>",
String::from_utf8(dec_output.stderr).unwrap()
);
}
}
}
}
Das würde so auch gehen, allerdings brauche ich unbedingt statt
io::copy
einen Loop der mir Häppchenweise die Bytes aus dem Zweiten Prozess ließt und den Ersten schreibt.Hier habe ich ein Beispiel gefunden, wo in stdin geschrieben wird, aber das hat mir auch nicht viel geholfen.
Könnt ihr mir hier ein paar Tips geben?