2016-04-04 18 views
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.

+0

Çocuk işleminin 'stdout'unu' p.getInputStream() 'ile okuyorsunuz. Verilerinizi, p.getOutputStream() 'yoluyla çocuk sürecinin" stdin "ine beslemeniz gerekir. 'Runtime.exec()' parametrenize '

+0

Çıkış akışını kullandım out = p.getOutputStream(); out.write (" user3578884

+0

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. –

cevap

0

Sonunda bunu çözdüm. Programa, içeriğini kontrol eden bir toplu iş dosyası ekliyorum. Bu toplu iş dosyasını çalıştırarak sorun çözüldü.

public static void writeBatchFile(String batchFileName, String fileName, String inputFile) throws Exception{ 
    FileWriter write = new FileWriter(batchFileName); 
    PrintWriter print_line = new PrintWriter(write); 
    print_line.println("#!/bin/bash"); 
    print_line.println("siesta < "+ inputFile +".fdf"+ " > " + fileName + ".out"); 
    print_line.close(); 
} 
İlgili konular