2016-04-01 15 views
0

Ich habe Probleme mit dem> Operator, um in Datei in Process Builder zu schreiben. Der eigentliche Prozess wird gut laufen und lassen Sie mich mit einem InputStreamReader etc parsen, um die Ausgabe zu analysieren. Ich möchte, dass der Prozess mit einer Befehlszeile wie> test.json zum Beispiel in eine Datei geschrieben wird.Java ProcessBuilder Problem

Hier ist mein Code

try { 
    //process builder used to run a Python script 
    ProcessBuilder process = new ProcessBuilder("python", 
    System.getProperty("user.dir")+"\\createJson.py","--structure","cloc.csv", 
            "--weights","EntityEffort.csv",">","a.json"); 

    process.directory(new File("c:\\users\\chris\\desktop\\test2")); 
    Process p = process.start(); 

} catch(Exception e) { 
    e.printStackTrace(); 
} 
+0

Erhalten Sie irgendwelche Ausnahmen oder ist das Problem beschränkt, die Ausgabedatei nicht zu erhalten? –

+1

Umleitungssymbole werden von der Befehlsshell interpretiert. Unter Linux müssten Sie eine Shell (z. B. bash) aufrufen, die dann die Befehlszeile ausführt. Ich poste das nicht als Antwort, weil ich nicht sicher bin, wie das in Windows funktioniert (dh, cmd.exe wird hier unter dem Deckblatt aufgerufen), aber ich vermute, dass Sie cmd.exe aufrufen und die gewünschte Befehlszeile übergeben müssen ausführen. –

Antwort

1

Wie @JimGarrison darauf hinweist, > von der Shell interpretiert wird. Hier starten Sie direkt einen Prozess für createJson.py, ohne eine Shell.

In UNIX können Sie Process verwenden, um eine Schale zu beginnen:

process = new ProcessBuilder("bash", "someCommand", ">", "outputfile"); 

Etwas Ähnliches wird wahrscheinlich mit Windows und dem cmd.exe arbeiten.

Allerdings ist es nicht sehr gute Praxis. Es ist eine Gelegenheit für Command-Injection-Angriffe. Der Aufruf externer Prozesse ist ein letzter Ansatz, und Sie sollten versuchen, das zu minimieren, was Sie in diesen Prozessen tun.

Sie wären also besser dran, mit dem zu bleiben, was Sie haben, und die Umleitung zu Datei in Java zu behandeln. Der ProcessBuilder javadoc gibt ein Beispiel:

File log = new File("log"); 
processBuilder.redirectOutput(Redirect.appendTo(log));