1

我有一段代码通过使用以下命令调用 bash 终端的实例——

proc = Runtime.getRuntime().exec("/bin/bash", null, working-dir);

然后在这个被调用的 bash 实例上运行 unix 命令,我正在使用这样的 PrintWriter 对象——

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);

然后,我使用 PrintWriter 对象以下列方式实际执行命令——

out.println("pwd");
out.println("ls >a.txt");

虽然这两个命令似乎都可以正常工作,但在我根据一些用户输入构建命令的情况下,我遇到了一个问题。具体来说,我正在构建一个命令来将一些文件发送到网络上的打印机,我正在这样做——

while ((strLine = br.readLine()) != null)   {
cmd= blah +blah +blah;//Construction of the command
out.println(cmd);
}

上面这段代码中实际发生的是 br 正在从包含所有需要打印的文件的文件中读取,然后具有文件名的字符串进入命令,我将其写入 PrintWriter 对象。

我面临的问题是,我猜想发生某种排队,并且 PrintWriter 对象实际上并没有在每次构造命令时将命令传递给调用的 bash 实例。所以在一天结束时,如果正在构建 40 个命令,那么只有大约 16-18 个文档正在打印。我猜是因为它一次性将所有命令发送到打印机导致损失。我想消除这种损失。

任何指针??

谢谢 p1nG

4

1 回答 1

1

尝试在循环中放置一个 out.flush() 。这将刷新您创建的 BufferedWriter 中的缓冲区。

另一个提示可能是避免尝试对所有命令使用单个 bash exec,而是单独构造和执行命令。考虑使用Process Builder而不是 Runtime.exec()。

于 2010-07-24T09:00:39.517 回答