作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
请往下看第二次更新。我不想改变这个问题之前的上下文。
我正在使用来自 Java 应用程序的 wkhtmltoimage。
使用它的标准方法是 - path-to-exe http://url.com/image.png
。
根据他们的文档,如果我们写一个 -
而不是输入 URL,输入将转换为 STDIN。
我正在使用 ProcessBuilder
启动流程 -
ProcessBuilder pb = new ProcessBuilder(exe_path, " - ", image_save_path);
Process process = pb.start();
现在我不知道如何将输入流通过管道传输到这个进程。
我将一个模板文件读入了 DataInputStream
,我在末尾附加了一个字符串:
DataInputStream dis = new DataInputStream (new FileInputStream (currentDirectory+"\\bin\\template.txt"));
byte[] datainBytes = new byte[dis.available()];
dis.readFully(datainBytes);
dis.close();
String content = new String(datainBytes, 0, datainBytes.length);
content+=" <body><div id='chartContainer'><small>Loading chart...</small></div></body></html>";
如何将 content
通过管道传输到进程的 STDIN
?
更新---
按照 Andrzej Doyle 的回答:
我使用了进程的getOutputStream()
:
ProcessBuilder pb = new ProcessBuilder(full_path, " - ", image_save_path);
pb.redirectErrorStream(true);
Process process = pb.start();
System.out.println("reading");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write(content);
这样做会报错:
Exception in thread "main" java.io.IOException: The pipe has been ended
第二次更新--------
当前代码块是这样的:
try {
ProcessBuilder pb = new ProcessBuilder(full_path, "--crop-w", width, "--crop-h", height, " - ", image_save_path);
System.out.print(full_path+ "--crop-w"+ width+ "--crop-h"+ height+" "+ currentDirectory+"temp.html "+ image_save_path + " ");
pb.redirectErrorStream(true);
Process process = pb.start();
process.waitFor();
OutputStream stdin = process.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
// content is the string that I want to write to the process.
writer.write(content);
writer.newLine();
writer.flush();
writer.close();
} catch (Exception e) {
System.out.println("Exception: " + e);
e.printStackTrace();
}
运行上面的代码给我一个IOException: The pipe is being closed.
我还需要做些什么来保持管道畅通?
最佳答案
Exception in thread "main" java.io.IOException: The pipe has been ended
这意味着您启动的进程已经终止。我建议您阅读输出以了解原因。例如它给你一个错误吗。
关于java - 如何将 InputStream 通过管道传输到 ProcessBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241800/
我是一名优秀的程序员,十分优秀!