如何在不写入节点js磁盘的情况下将子进程与文件args一起使用

时间:2018-11-28 07:08:48

标签: node.js

我想使用“ imagemagick”的子进程转换接收到的图像(带有二进制缓冲区的POST请求),然后将结果发送回(同样,作为二进制缓冲区)。 imagemagick命令需要文件名,例如

"convert input_file output_file"

将传入的图像保存到磁盘,进行转换,然后从磁盘读取输出文件以将其发送回去,这感觉很浪费。很多磁盘IO操作 在RAM中完成所有操作的最佳方法是什么?

更新: 我得到了一个很好的答案,但是如果我可以保留对来自stdout的子进程日志的访问,那就太好了。

1 个答案:

答案 0 :(得分:1)

convert命令可以从stdin接收输入并输出到stdout(取决于您的操作系统)。要使用它,请用-替换文件名,以便:

convert ${your options} -

然后使用节点的child_process生成,以获取输入流并对其进行写入,并从输出流中进行读取。例如:

const spawn = require('child_process').spawn
const child = spawn('convert ${your options} - ')
child.stdout.on('data', (chunk) => { /* append output chunk */ })
child.stdout.on('end', () => { /* Do something with the result */ })
child.stderr.on('data' (chunk) => { console.log('Failed: ', chunk) }
child.stdin.write(buffer)

请参见以下示例:https://imagemagick.org/script/command-line-processing.php