请移至第二次更新。 我不想更改此问题的先前上下文。
我正在使用Java应用程序中的wkhtmltoimage。
使用它的标准方法是- path-to-exe http://url.com/ image.png
。
根据他们的文档,如果我们编写一个-
URL而不是输入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.
我还需要做什么来保持管道畅通?
从中删除空格" - "
-Shell解析器将删除常规空格,但是在中ProcessBuilder
,它被解释为以空格开头和结尾的(文字)文件名。
(实际上,按照Peter的建议查看流程的输出可能会告诉您…)
问题内容: 如何将以下代码转换为使用流/管道,从而无需将全部内容读入内存?就像是: 问题答案: 怎么样 可以在以下位置找到其文档:http : //golang.org/pkg/io/#Copy 不过,这很简单。给它一个和一个,然后一次将数据复制到一个小块上(例如,一次不全部存储在内存中)。 因此,您可以尝试编写如下内容: 我还没有测试以上内容;我只是从您上面的示例中快速地将其攻破,但是如果没有钱
因此,在这里我将basePackages硬编码为“com.example”。这不是我想要的。我想通过命令行参数从终端运行应用程序时接收包名。有没有一种方法可以将命令行参数传递给应用程序,并使用我在BasePackages中接收到的参数?提前致谢
问题内容: 我试图找到定义可以以一般方式使用的组件的正确方法: 当然,可以想象并在父组件和子组件之间进行渲染的逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: 用新道具克隆Children 您可以使用React.Children遍历子级,然后使用React.cloneElement使用新的道具(浅合并)克隆每个元素,例如
我正在尝试从使用自由式詹金斯构建切换到管道项目。 我喜欢它的许多方面,但我希望我可以使用多分支管道,因为它更适合我们公司,但目前这不是一个选择。 我们目前所做的是创建一个名为
问题内容: 我正在尝试找到定义可以以一般方式使用的某些组件的正确方法: 当然,您可以想象并作为该逻辑的示例,在父组件和子组件之间存在一种渲染逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: Cloning children with new props 您可以使用React.Children遍历子级,然后使用React.
我是一个相当新的反应,这是一个我正在努力解决的问题。