簡體   English   中英

與Java中的Linux Shell提示進行交互

[英]interacting with linux shell prompt in Java

Executor exec = new DefaultExecutor();
exec.setWorkingDirectory("/var/java/apache-tomcat-7.0.47/webapps/Telegram/tg")
CommandLine cl = new CommandLine("bin/telegram-cli -k tg-server.pub -W -U root");
int exitvalue = exec.execute(cl);

我如何獲得此命令的輸出:

exec.execute(cl);

並在telegram-cli命令提示符下運行其他相關命令,例如contact_list,msg contact“ Hello world”;

在我看來,僅使用ProcessBuilder會更容易。

ProcessBuilder pb = new ProcessBuilder("bin/telegram-cli","-k","tg-server.pub","-W","-U","root");
pb.directory(new File("/var/java/apache-tomcat-7.0.47/webapps/Telegram/tg"));
Process p = pb.start();
try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(p.getOutputStream()),true)) {
    String line = null;
    pw.println("contact_list");
    while ((line = br.readLine()) != null) {
        System.out.println("line = " + line);
    }
}

更新似乎需要清除使用PrintWriter進行的寫入。 您可以通過調用pw.flush()或向PrintWriter構造函數添加第二個參數true來實現。 我不知道telegram-cli的命令,但是您需要添加一個將產生可用於標識何時退出的輸出的命令。 這是使用/ bin / sh的示例。

ProcessBuilder pb = new ProcessBuilder("/bin/sh");
Process p = pb.start();
try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(p.getOutputStream()),true)) {
    String line = null;
    pw.println("ls");
    pw.println("pwd");
    pw.println("echo quit"); // this gives me output I can test for to break the loop
    pw.flush();
    while ((line = br.readLine()) != null && !line.contains("quit")) {
        System.out.println("line = " + line);
    }
}
int retcode = p.waitFor();
System.out.println("process ended with " + retcode);

產生以下輸出:

line = build
line = build.xml
line = dist
line = manifest.mf
line = nbproject
line = src
line = /home/shackle/NetBeansProjects/JavaApplication20
process ended with 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM