使用std :: process :: Command时,不能正确传递长格式参数

时间:2016-05-25 16:51:28

标签: linux rust command-line-interface

我遇到一个问题,即长格式参数未正确传递给特定的命令行实用程序。

所有这些都有效:

Command::new("mpg321").arg("--gain 100").arg("file.mp3").spawn().unwrap()
Command::new("mpg123").arg("-h 2").arg("file.mp3").spawn().unwrap()
mpg123 --halfspeed 2 file.mp3

但是这个:

Command::new("mpg123").arg("--halfspeed 2").arg("file.mp3").spawn().unwrap()

返回:

mpg123: Unknown option "halfspeed 2"

我怀疑故障位于mpg123侧,但这并不完全合理,因为它在从命令行调用时有效。

2 个答案:

答案 0 :(得分:4)

--halfspeed 2是两个论点。你应该拨打arg两次:

Command::new("mpg123").arg("--halfspeed").arg("2").arg("file.mp3")...

使用.args将所有参数作为数组传递:

Command::new("mpg123").args(&["--halfspeed", "2", "file.mp3"])...

答案 1 :(得分:3)

mpg123期望这样调用:mpg123 --halfspeed 2 file.mp3,这使得argv看起来像{"mpg123", "--halfspeed", "2", "file.mp3"}。您调用它的方式相当于mpg123 "--halfspeed 3" file.mp3,这使得argv成为{"mpg123", "--halfspeed 2", "file.mp3"}mpg123无法理解。

"-h 2"工作的原因是单个字母选项可以在没有空格的情况下使用(意味着你可以只写-h2),所以对于那些参数解析器需要能够处理的情况选项的字母和值在同一个argv条目中。显然,即使argv条目包含空格,逻辑也会以这种方式实现。