Ich habe viele Threads über das Laufen der externen Programme überprüft, aber sie können mein Problem nicht lösen. für die Ausführung von Siesta (DFT Berechnung) Ich habe so etwas wie diese verwenden (Si.fdf ist die Eingabedatei): Siesta < Si.fdf Ich verwende diesen Code:Laufendes externes Programm (Siesta) durch Java
public static void main(String argv[]) throws IOException {
Runtime r = Runtime.getRuntime();
Process p;
BufferedReader is;
String line;
System.out.println("siesta < Si.fdf");
p = r.exec("siesta < Si.fdf");
System.out.println("In Main after exec");
is = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = is.readLine()) != null)
System.out.println(line);
System.out.println("In Main after EOF");
System.out.flush();
try {
p.waitFor();
} catch (InterruptedException e) {
System.err.println(e); //
return;
}
System.err.println("Process done, exit status was " + p.exitValue());
return;
}
, aber dieser Code läuft nur Siesta ohne Eingabedatei.
Sie lesen den 'stdout' des Kindprozesses über' p.getInputStream() '. Sie müssen Ihre Daten über 'p.getOutputStream()' in die 'stdin' des Kindprozesses einspeisen. Hinzufügen von '
Ich habe den OutputStream verwendet out = p.getOutputStream(); out.write ("
user3578884
Ich meinte, dass Sie den ** Inhalt ** Ihrer Eingabedatei in die 'stdin' Ihres Kindprozesses schreiben sollten. Du hast dein Problem gelöst, indem du Bash hast, der für dich arbeitet; Bash versteht das Zeichen '<' als eine Anweisung, um die Eingabedatei zu lesen und ihren Inhalt in 'stdin' von Siesta zu schreiben. Java interpretiert das Zeichen <