0
Dış programların çalıştırılması hakkında birçok konu kontrol ettim ancak sorunumu çözemiyorlar. siesta < Si.fdf Bu kodu kullanıyorum:java tarafından harici program çalıştırma (Siesta)
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;
}
Böyle bir şey kullanmak zorunda Siesta (DFT Hesaplaması) çalıştıran için (Si.fdf girdi dosyasıdır)Ancak bu kod, herhangi bir giriş dosyası olmadan sadece Siesta'yı çalıştırır.
Çocuk işleminin 'stdout'unu' p.getInputStream() 'ile okuyorsunuz. Verilerinizi, p.getOutputStream() 'yoluyla çocuk sürecinin" stdin "ine beslemeniz gerekir. 'Runtime.exec()' parametrenize '
Çıkış akışını kullandım out = p.getOutputStream(); out.write ("
user3578884
Giriş dosyanızın ** içeriğini ** yazmanız, çocuk sürecinizin 'stdin'lerine yazmalısınız. Bash'in sizin için çalışmasını sağlayarak sorununuzu çözdünüz; Bash, giriş dosyasını okumak ve içeriğini Siesta'nın "stdin" inine yazmak için bir talimat olarak '<' karakterini anlar. Java '' karakterini böyle yorumlamaz, bu bir Unix kabuğu değildir. Java'da aynı şeyi elde etmek için, Bash'in ne yaptığını yeniden oluşturmanız gerekir: giriş dosyasının içeriğini okuyun ve bunları çocuk sürecinizin 'stdin'lerine doğru itin. –