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