java - ProcessBuilder - 卡在 readLine() 方法上

标签 java process processbuilder

运行以下简单程序:

    ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir");
    Process p = pb.start();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while((line = bufferedReader.readLine()) != null){
        System.out.println(line);
    }

    System.out.println("Exit");

永远不会到达“退出”println - 只是无限地卡在 readLine() 方法上。我知道这是(很可能)由于 powershell 在最后一行没有输出 \nreadLine 不确定是否已到达末尾而引起的。有没有办法解决这个问题并正确读取输入流?顺便提一句。 processbuilder 上的 inheritIO 方法导致了同样的问题...

更新

这个:

 ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir");
        pb.redirectErrorStream(true);
        Process p = pb.start();
//        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
//        String line;
//        while((line = bufferedReader.readLine()) != null){
//            System.out.println(line);
//        }
    p.waitFor();
    System.out.println("Exit");

也无限挂起...

最佳答案

Powershell 并未结束。我可能会使用 Java 列出目录,但这应该适用于您的示例。

ProcessBuilder pb = new ProcessBuilder("dir");

关于java - ProcessBuilder - 卡在 readLine() 方法上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498861/

相关文章:

Javamail 未读消息返回最后一条消息而不是未读消息

java - 如何在特定 JAX - RS 调用上排除对象内的字段?

java - 运行另一个程序但保留 stdout/stderr

java - 使用 Java 在 Linux 上的文件夹内运行进程

java - 使用 Java ProcessBuilder 与 SQLite shell 交互

java - 使用 Map 值调用 Java 方法

java - Sub 在其自己的字段成员上使用 super 的实例方法

asp.net - 通过非个性化从 .NET Web 应用程序启动流程

c# - 如何在新进程中启动form2?

python - 杀死除当前进程之外的所有 python 主进程