2016-08-27 3 views
1

Scalaコードから外部バイナリを実行し、その出力を取得する必要があります。これを行う標準的な方法は、scala.sys.processを使用しているようです。次のコードは、主に動作します:余分な改行があるようScalaのsys.processを使用してシェルを外すときに余分な末尾の改行を避ける方法

import scala.sys.process._ 
val command = Seq("python3", "-c", "print('foo', end='')") 
val result = command.!! 

しかし、それはそうです:

print(result.length) // prints 4 instead of 3 
print(result) // prints an extra newline at the end 

私はちょうど最後の文字を削除するには、結果の文字列を変更することができますが、それがあること奇妙なようですsys.processは末尾の改行を出力に追加するので、私がやっていることや設定可能なバグかもしれないと思った。

末尾の改行はそこにあるはずですか?

出力文字列を操作せずに削除する方法はありますか?

+0

は、私は本当のバイナリが出力任意の潜在終わりに空白を含む文字列、および私が望むことができますので、 '.trim'をやって避けたい:あなたのシェルがサポートしていればそうでない場合、あなたは、これを行うことができますそれが出力するものを正確に保存する。 –

答えて

3

sys.processは、ではありません。末尾の改行を追加してください:echoです。 documentationから:

説明 エコーユーティリティは標準出力に、空白のシングルで区切られた任意の指定されたオペランド、(nは\ ') characters and followed by a newline ( ') 文字を書き込みます。

trimを使用するとこれを削除できます。

val result = "echo -n foo".!!

+0

あなたはそうです - エコーはその場合に改行を追加していました。しかし、私が扱っている実際のバイナリは最後に改行を出力しません。このバグを修正するための例を今更新する。 –

関連する問題