2

这是一个令人沮丧的问题。我正在运行以下 Java 代码:

       try {
            String query = someQuery, input = someInput;
            ProcessBuilder pb = new ProcessBuilder("cmd", "/c", query); // Windows
            Process p = pb.start();

            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            try
            {
                // Input to the query
                OutputStream os = p.getOutputStream();
                os.write(input.getBytes());
                os.flush();
                os.close();
            } catch (IOException e)
            {
            }

            System.out.println("STDIN : \n");

            while ((s = stdInput.readLine()) != null)
            {
                System.out.println(s);
            }

            System.exit(0);
        } catch (IOException e)
        {
            e.printStackTrace();
        }

query是一个管道命令。其中的每个子命令query都是一个类 unix 的 API 调用(专有的:Sirsi Unicorn API,如果有人感兴趣的话);它也是一个数据库调用。Windows 命令提示符可以容纳这些 API 调用。

问题:

如果我尝试通过管道传输 2 个数据库命令,程序会成功运行,但如果我通过管道传输 3 个数据库命令,程序就会挂起。如果在 cygwin 上运行这些相同的命令,则程序可以正常工作。有趣的是,如果我将 3 管道命令分成两个单独的命令,程序运行良好。

问题:

我的问题是 - Windows 命令行上是否存在管道缓冲区问题?是否有窗户上的管道不起作用的情况?管道可以超时吗?

在这一点上,任何信息都值得赞赏。

4

0 回答 0