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

所有这些工作:

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方面,但是由于从命令行调用它可以正常工作,所以没有完全意义。

最佳答案

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条目包含空格也可以工作的方式实现的。

关于linux - 使用std::process::Command时无法正确传递长格式参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37443293/

10-15 16:32