Questions tagged «processbuilder»

4
ProcessBuilder和Runtime.exec()之间的区别
我正在尝试从Java代码执行外部命令,但我注意到Runtime.getRuntime().exec(...)和之间存在差异new ProcessBuilder(...).start()。 使用时Runtime: Process p = Runtime.getRuntime().exec(installation_path + uninstall_path + uninstall_command + uninstall_arguments); p.waitFor(); exitValue为0,命令终止正常。 但是,使用ProcessBuilder: Process p = (new ProcessBuilder(installation_path + uninstall_path + uninstall_command, uninstall_arguments)).start(); p.waitFor(); 退出值为1001,尽管waitFor返回,该命令在中间终止。 我该怎么办才能解决问题ProcessBuilder?

10
ProcessBuilder:转发已启动进程的stdout和stderr,而不会阻塞主线程
我正在使用ProcessBuilder在Java中构建一个流程,如下所示: ProcessBuilder pb = new ProcessBuilder() .command("somecommand", "arg1", "arg2") .redirectErrorStream(true); Process p = pb.start(); InputStream stdOut = p.getInputStream(); 现在我的问题如下:我想捕获通过该进程的stdout和/或stderr进行的操作,并将其System.out异步重定向到。我希望该过程及其输出重定向在后台运行。到目前为止,我发现做到这一点的唯一方法是手动产生一个新线程,该线程将不断读取stdOut并调用适当的write()方法System.out。 new Thread(new Runnable(){ public void run(){ byte[] buffer = new byte[8192]; int len = -1; while((len = stdOut.read(buffer)) > 0){ System.out.write(buffer, 0, len); } } }).start(); 虽然这种方法行得通,但感觉有点脏。最重要的是,它为我提供了另外一个线程来正确管理和终止。有什么更好的方法吗?

4
Java编程:从Java调用exe并传递参数
我正在寻找一种从Java调用exe并传递特定参数的机制。我能怎么做? Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; System.out.printf("Output of running %s is:", Arrays.toString(args)); while ((line = br.readLine()) != null) { System.out.println(line); } 先前的代码有效。但是我无法在中传递参数。MyExe.exe接受参数。另一个问题是PathToExe有空格。ProcessBuilder似乎无法正常工作。例如: C:\\User\\My applications\\MyExe.exe 谢谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.