这是一个令人沮丧的问题。我正在运行以下 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 命令行上是否存在管道缓冲区问题?是否有窗户上的管道不起作用的情况?管道可以超时吗?
在这一点上,任何信息都值得赞赏。