LinuxのトラフJavaでterminalコマンドを実行しようとしていますが、inputStreamからの入力を取得できません。java.lang.Processからの出力の読み取り - 何も読み取ることはありません
これは私のコードである
ProcessBuilder build = new ProcessBuilder("/usr/bin/xterm", "find /home");
Process pr = null;
BufferedReader buf;
try {
build.redirectErrorStream(true);
pr = build.start();
buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = buf.readLine();
pr.waitFor();
while (true) {
System.out.println(line + "sadasdas");
line = buf.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
処理が実行され、直ちに端末閉じ、何も出力がcatchedず、印刷されています。一方、私は未知のコマンドを作成する場合、私はどのようにコマンドを使用するヒントとすべての行を取得します。私はWindowsのcmdと同じ問題があった。私はgetRuntime.exec(cmd)メソッドを使用しようとしましたが、最後は同じです。
また、私は読んで何がまだありません作るこの
public class kurdee
{
public static Thread thread;
public kurdee()
{
List cmd = new LinkedList();
cmd.add(new String("/usr/bin/xterm"));
cmd.add(new String("find"));
thisProc thispr = new thisProc(cmd);
this.thread = new Thread(thispr);
thread.start();
reader rd = new reader(thispr.proc);
Thread thread1 = new Thread(rd);
thread1.start();}
public static void main(String args[])
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
kurdee kurd = new kurdee();
}
});
}
}
class reader implements Runnable
{
private BufferedReader buf;
private Process proc;
public reader(Process proc)
{
this.proc=proc;
this.buf = new BufferedReader(new InputStreamReader(proc.getInputStream()));
}
public void run()
{
String line="";
System.out.println("Thread is alive");
try{
//Thread.sleep(1000);
line = buf.readLine();
}catch(Exception ex){System.out.println(ex + " before first while started");}
while(kurdee.thread.isAlive())
{
System.out.println("Thread is alive");
while(line!=null)
{
try{
//System.out.println(proc.exitValue());
System.out.println(line + " asd");
line=buf.readLine();
}catch(Exception e){System.out.println(e + " Inner while loop");}
}
}
}
}
class thisProc implements Runnable
{
private ProcessBuilder build;
public static Process proc=null;
public thisProc(List<String> args)
{
this.build = new ProcessBuilder(args);
build.redirectErrorStream(true);
try{
this.proc = build.start();
}catch(Exception ex){System.out.println(ex + " proc class");}
}
public void run()
{
try{
proc.waitFor();
}catch(Exception ex){System.out.println(ex + " proc class");}
}
}
しかしなどを呼び出すスレッドの任意の組み合わせを持つように見えたプロセスと読者のために作成した別のスレッドに試してみました。
"find/home -xdev -samefile file"コマンドを使用してすべてのハードリンクをファイルに保存しようとしていますが、もっと簡単な方法があります。
ちょっと好奇心が強い、なぜ2番目を選んだのですか?後で私の答えは同じですか? – jtahlborn