Ho il seguente file di finestre batch (run.bat):Come uscita di processo I tubi in un file su Windows e JDK 6u45
@echo off
echo hello batch file to sysout
E il seguente codice Java, che gestisce i file batch e reindirizzamenti output in un file:
public static void main(String[] args) throws IOException {
System.out.println("Current java version is: " + System.getProperty("java.version"));
ProcessBuilder pb =
new ProcessBuilder("cmd.exe", "/c",
"run.bat"
,">>", "stdout.txt","2>>", "stderr.txt"
);
System.out.println("Command is: " + pb.command());
Process proc = pb.start();
InputStream in = proc.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitValue = proc.exitValue();
System.out.println("Exit value: " + exitValue);
}
On JDK fino al JDK6u43 ottengo il seguente output:
Current java version is: 1.6.0_29
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
Exit value: 0
e l'output dello script è scritto nel file. Come di JDK 6u45 e 7, ottengo il seguente output:
Current java version is: 1.6.0_45
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
hello batch file to sysout
Exit value: 0
E nulla è scritto nel file di output.
Questo può o non può essere messa in relazione alle modifiche apportate a Runtime.exec(), descritto in: http://www.oracle.com/technetwork/java/javase/6u45-relnotes-1932876.html
Qual è il modo corretto di iniziare un processo in Windows con uscita reindirizzato al file?
Nota: In uno scenario del mondo reale, il comando da eseguire può includere parametri con spazi, come in:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
"run.bat", "Some Input With Spaces",
">>", "stdout.txt","2>>", "stderr.txt");
Aiuta a combinare tutti gli argomenti della riga di comando a destra del '\ C' in un singolo arg? –
Funziona solo se non ho spazi negli argomenti passati allo script. – Barak