1

So, i am getting this error when i run a command in linux terminal using std::process::Command. The part of the code is:

use std::process::Command;

fn main() {
    let mut playmusic = "mpv https://www.youtube.com/watch?v=kJQP7kiw5Fk";
    let status = Command::new(playmusic).status().expect("error status");    
}

The above code for the command, i found at rust docs. I tried everything in the docs, but none of them worked like using wait command.

Everytime i get this error:

thread 'main' panicked at 'error status: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:46:63

Since, the error says that the command not found, i ran it in my terminal but there it ran successfully. But, when using this in std::process::Command, it fails.

  • Does this answer your question? [Unable to use std::process::Command - No such file or directory](https://stackoverflow.com/questions/40836973/unable-to-use-stdprocesscommand-no-such-file-or-directory) – Jmb Oct 09 '22 at 17:12

1 Answers1

3

It fails, because you are using it wrong. You want to exec program mpv with argument https://..., but you are currently telling rust to run program mpv https://..., which of course does not exist. Too pass arguments to programs use Command's method arg or args.

So your example can be fixed as such:

use std::process::Command;

fn main() {
    let url = "https://www.youtube.com/watch?v=kJQP7kiw5Fk";
    let status = Command::new("mpv")
        .arg(url)
        .status()
        .expect("Failed to run mpv");    
}

If you want to know why it is designed this way, it's because rust will call one of the exec syscalls. See exec(3) to understand how it works.

Aleksander Krauze
  • 3,115
  • 7
  • 18