猿问

在 Ubuntu 上使用 ProcessBuilder 运行命令时永远等待输出

我正在尝试使用 ProcessBuilder 在 Ubuntu 上获取命令的执行结果。我尝试从以下技术中获取输出结果。但是没有结果显示,程序等待没有输出。


执行命令:


 String[] args = new String[]{"/bin/bash", "-c", "pandoc -f html - t asciidoc input.html"};

Process process = new ProcessBuilder(args).start();

获取输出技术1:


InputStream inputStream = process.getInputStream();

StringWriter stringWriter = new StringWriter();

IOUtils.copy(inputStream, stringWriter, "UTF-8");

// Waiting

String asciidocoutput = writer.toString();

获取输出技术2:


BufferedReader reader= new BufferedReader(new InputStreamReader(process.getInputStream()));

StringBuilder builder = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

// Waiting

 builder.append(line);

builder.append(System.getProperty("line.separator"));

}

String result = builder.toString();


慕桂英4014372
浏览 665回答 1
1回答

阿波罗的战车

ProcessBuilder的构造函数接受一个命令,每个后续的 String 都被视为第一个 String 的参数,被识别为主命令。尝试更换/bin/bash用pandoc,看看它是否工作。在我这边,我可以在没有 ProcessBuilder 帮助的情况下运行任意命令,Runtime.getRuntime().exec(...)而是使用,如下所示:public static void main(String[] args) throws Exception {    Process proc = Runtime.getRuntime().exec("cmd /c ipconfig");    BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));    String line = null;    while((line = reader.readLine()) != null){        System.out.println(line);    }}获得预期输出:Configurazione IP di WindowsScheda Ethernet Ethernet:   Suffisso DNS specifico per connessione:    Indirizzo IPv6 locale rispetto al collegamento . : fe80::fcba:735a:5941:5cdc%11   Indirizzo IPv4. . . . . . . . . . . . : 192.168.0.116   Subnet mask . . . . . . . . . . . . . : 255.255.255.0   Gateway predefinito . . . . . . . . . : 192.168.0.1Process finished with exit code 0如果你真的需要使用ProcessBuilder,同样的行为可以通过定义你的Process方式来实现:Process proc = new ProcessBuilder("ipconfig").start();只需调用您要运行的命令即可。
随时随地看视频慕课网APP

相关分类

Java
我要回答