I was glad to have the Python equivalent of the shlex crate, which
understands shell quoting, helping in transforming command arguments
into what's suitable to send to
process::Command::args. This allows
one to avoid the pain experienced by naively doing the following:
let mut command = command.split(char::is_whitespace); std::process::Command::new(command.next().unwrap()) .args(command) .spawn() ...
If the command is something like
hg commit --message 'git eat world',
then the iterator would expand to:
That will not run, and will fail with a not-obvious error message. Using shlex, we instead:
let mut command = shlex::split(command).unwrap()); std::process::Command::new(command.remove(0).unwrap()) .args(command) .spawn() ...
Output should then be like:
- git eat world