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

Здравствуйте, пишу враппер для mplayer. почему не работает write/read? не

могу не читать stdout, не писать в stdin
use tokio::io::{AsyncBufReadExt, AsyncWriteExt};

#[tokio::main]
async fn main() {
let filename = "/home/user/Intro.mp3";
let volume: i32 = 30;

let mut mplayer = match tokio::process::Command::new("mplayer")
.arg("-slave")
.arg("-idle")
.arg("-noautosub")
.arg("-noconsolecontrols")
.arg("-nolirc")
.arg("-really-quiet")
.args(&["-softvol", "-volume", &volume.to_string()])
.args(&["-vc", "null"])
.args(&["-vo", "null"])
.args(&["-ao", "alsa:device=plughw=1.0"])
.arg("")
.stdout(std::process::Stdio::piped())
.stdin(std::process::Stdio::piped())
.spawn()
{
Ok(p) => p,
Err(e) => {
println!("Can't mplayer: {}", e);
return;
}
};

let child_in = mplayer.stdin.as_mut().unwrap();
let mut child_out = tokio::io::BufReader::new(mplayer.stdout.as_mut().unwrap());

let mut interval_second = tokio::time::interval(std::time::Duration::from_secs(1));

let cmd = format!("loadfile {}\n", filename);
if let Err(e) = child_in.write_all(cmd.as_bytes()).await {
println!("mplayer error: {}", e);
}

if let Err(e) = child_in.flush().await {
println!("FLUSH: {}", e);
}

let mut line = String::new();

loop {
tokio::select! {
_ = child_out.read_line(&mut line) => {
println!("line:{}", line);
if line.is_empty() {
println!("MPlayer: break");
break;
}
}
_ = interval_second.tick() => {
println!("tick");
}
}
}
println!("finish");
}

2 ответов

9 просмотров

Что по ошибке?

Виталий- Автор вопроса
Эрик
Что по ошибке?

Никакой ошибки. Просто тишина

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
Карта сайта