2016-08-27 6 views
1

Ich muss eine externe Binärdatei aus meinem Scala-Code ausführen und seine Ausgabe erhalten. Der übliche Weg, dies zu tun, scheint scala.sys.process zu verwenden. Der folgende Code meist funktioniert:Wie vermeidet man eine zusätzliche abschließende Zeilenumbruch bei der Verwendung von Scala sys.process Shell

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

aber es scheint, wie es ein extra Newline ist:

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

Ich kann nur das Ergebnis Zeichenfolge ändern das letzte Zeichen zu entfernen, aber es scheint seltsam, dass sys.process fügt der Ausgabe einen abschließenden Zeilenumbruch hinzu, also dachte ich, es könnte entweder ein Fehler sein mit dem was ich mache oder etwas, das konfiguriert werden kann.

Soll der abschließende Zeilenumbruch da sein?

Gibt es eine Möglichkeit, es loszuwerden, ohne die Ausgabezeichenfolge zu manipulieren?

+0

ich ein '.trim' tun vermeiden wollen, weil die reale binäre können beliebige Zeichenketten ausgegeben, die möglicherweise am Ende mit Leerzeichen, und ich möchte genau beibehalten, was es ausgibt. –

Antwort

3

sys.processist nicht Hinzufügen der abschließenden Newline: echo ist. Vom documentation:

BESCHREIBUNG Das Echo Dienstprogramm schreibt alle spezifizierten Operanden, getrennt durch einzelnes Leerzeichen (') characters and followed by a newline ( \ n ') Charakter, in der Standardausgabe.

Mit trim kann dies entfernen. Andernfalls können Sie dies tun, wenn Ihre Shell unterstützt:

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

+0

Sie haben Recht - Echo hat in diesem Fall eine neue Zeile hinzugefügt. Die echte Binärdatei, mit der ich es zu tun habe, gibt jedoch am Ende keinen Zeilenumbruch aus. Das Beispiel jetzt aktualisieren, um diesen Fehler zu beheben. –

Verwandte Themen