use*_*934 5 java io process stream java-io
我正在编写一个java程序来读取进程中的错误流.以下是我的代码结构 -
ProcessBuilder probuilder = new ProcessBuilder( command );
Process process = probuilder.start();
InputStream error = process.getErrorStream();
InputStreamReader isrerror = new InputStreamReader(error);
BufferedReader bre = new BufferedReader(isrerror);
while ((linee = bre.readLine()) != null) {
System.out.println(linee);
}
Run Code Online (Sandbox Code Playgroud)
如果实际将任何内容写入调用进程的错误流,则上述代码可以正常工作.但是,如果没有任何内容写入错误流,则对readLine的调用实际上会无限期挂起.但是,我想让我的代码通用,以便适用于所有场景.如何修改我的代码以实现相同的目标.
问候,开发
小智 3
这是一个迟到的回复,但问题还没有真正解决,而且它出现在一些搜索的首页上。我遇到了同样的问题,并且BufferedReader.ready()仍然会设置一个会锁定的情况。
如果您需要获取持久流,则以下解决方法将不起作用。但是,如果您只是运行一个程序并等待它关闭,那么这应该没问题。
我使用的解决方法是调用ProcessBuilder.redirectError(File). 然后我读取该文件并使用它向用户呈现错误流。效果很好,没有锁。我确实Process.destroyForcibly()在 Process.waitFor() 之后调用了,但这可能是不必要的。
下面是一些伪代码:
文件 thisFile = new File("somefile.ext");
ProcessBuilder pb = new ProcessBuilder(yourStringList);
pb.redirectError(thisFile);
进程 p = pb.start();
p.waitFor();
p.destroyForcously();
ArrayList fileContents = getFileContents(thisFile);
我希望这至少对您的一些用例有所帮助。
| 归档时间: |
|
| 查看次数: |
9644 次 |
| 最近记录: |