2016-05-25 13 views
1

ロングフォーム引数が特定のコマンドラインユーティリティに正しく渡されないという問題があります。std :: process :: Commandの使用時にロングフォーム引数が正しく渡されない

このすべての作品:

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の側にあると思っていますが、それはコマンドラインから呼び出されたときに機能するので完全な意味はありません。

答えて

3

のmpg123はこのように呼ばれることを想定していますmpg123 --halfspeed 2 file.mp3{"mpg123", "--halfspeed", "2", "file.mp3"}ようargv見えます。あなたの呼び出し方はmpg123 "--halfspeed 3" file.mp3と等価で、argv{"mpg123", "--halfspeed 2", "file.mp3"}となります。mpg123はわかりません。

"-h 2"作品は、単一文字のオプションは、スペースなしで使用することができるということであることを理由引数パーサは、オプションの文字と値があるというケースを処理できるようにする必要がある人のためので、(あなただけ-h2を書くことができ意味します)同じargvのエントリにあります。明らかに、ロジックは、argvエントリにスペースが含まれていても動作するように実装されています。

+0

「mpg321」と「--gain 100」で動作する理由は何ですか? –

+0

@andreygそれは私のためではありません( 'mpg123:不明なオプション "100をゲット")。 – sepp2k

+0

"mpg321"、別のユーティリティです。 –

4

--halfspeed 2は2つの引数です。

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

をか.argsを使用してアレイとして一緒にすべての引数を渡す:あなたは二回argを呼び出す必要があり

Command::new("mpg123").args(&["--halfspeed", "2", "file.mp3"])... 
関連する問題