Linux 长格式参数不是';使用std::process::命令时未正确传递

Linux 长格式参数不是';使用std::process::命令时未正确传递,linux,rust,command-line-interface,Linux,Rust,Command Line Interface,我有一个问题,长格式参数没有正确地传递给特定的命令行实用程序 所有这些工作: Command::new("mpg321").arg("--gain 100").arg("file.mp3").spawn().unwrap() mpg123--halfspeed 2 file.mp3 但这是: Command::new("mpg123").arg("--halfspeed 2").arg("file.mp3").spawn().unwrap() 返回: mpg123:未知选项“半速2” 我

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

所有这些工作:

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

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

mpg123:未知选项“半速2”
我怀疑故障在mpg123一侧,但这没有完全意义,因为它在从命令行调用时工作。

--halfspeed 2
是两个参数。您应该调用
arg
两次:

Command::new("mpg123").arg("--halfspeed").arg("2").arg("file.mp3")...
或者使用
.args
将所有参数作为数组一起传递:

Command::new("mpg123").args(&["--halfspeed", "2", "file.mp3"])...
--halfspeed 2
是两个参数。您应该调用
arg
两次:

Command::new("mpg123").arg("--halfspeed").arg("2").arg("file.mp3")...
或者使用
.args
将所有参数作为数组一起传递:

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

mpg123希望被这样调用:
mpg123--halfspeed 2 file.mp3
,这使得
argv
看起来像
{“mpg123”、“--halfspeed”、“2”、“file.mp3”}
。您对它的调用方式相当于
mpg123”--halfspeed 3“file.mp3
,这使得
argv
成为
{mpg123',“--halfspeed 2”,“file.mp3”}
,而
mpg123
无法理解


“-h2”
起作用的原因是,可以在没有空格的情况下使用单字母选项(这意味着您可以只编写
-h2
),因此对于这些选项,参数解析器需要能够处理选项的字母和值位于相同的
argv
条目中的情况。显然,该逻辑的实现方式是,即使
argv
条目包含空格,它也能工作。

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


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

你知道它为什么与“mpg321”和“-gain 100”一起工作吗?@andreyg它不适合我('mpg123:未知选项“gain 100”)。我不知道为什么会这样。它是“mpg321”,不同的实用程序。你知道它为什么与“mpg321”一起工作吗“mpg321”和“--增益100”?@andreyg这对我来说不是('mpg123:未知选项“增益100”)。我不知道为什么会。它是“mpg321”,不同的实用程序。