gpt4 book ai didi

java - 如何将 InputStream 通过管道传输到 ProcessBuilder

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:55 27 4
gpt4 key购买 nike

请往下看第二次更新。我不想改变这个问题之前的上下文。

我正在使用来自 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com