gpt4 book ai didi

node.js - 从 Node.js 中的 shell 脚本读取二进制输出

转载 作者:太空宇宙 更新时间:2023-11-04 01:11:04 24 4
gpt4 key购买 nike

我需要从 Node.js 脚本执行 shell 命令,读取其输出并在读取一定数量的字节后终止该程序。 (更准确地说,我想通过 smbget 部分下载文件)。

我想,最明显的方法是使用 childprocess.spawn(),手动缓冲输出,并在读取足够的数据时简单地 kill() 进程.

这很有效,只是我看起来有点笨重。所以我想变得更聪明(TM)并使用head。所以我按照文档中的指示将所有内容连接到 child_process (或者,更方便的是,使用 procstreams )生成相当于 cat/dev/urandom | 的管道。头--bytes=10。唉,一切都像这样燃烧起来:

events.js:72
throw er; // Unhandled 'error' event
^

Error: read ECONNRESET
at errnoException (net.js:883:11)
at Pipe.onread (net.js:539:19)

可能是因为 head 只是将流搞死,而我找不到捕获或以其他方式处理该错误的方法(尽管这可能只是因为我是 Node n00b :) 。

或者,我可以执行以下操作:

var cmd = 'cat /dev/urandom | head --bytes=100';
childprocess.exec(cmd, function (err, stdout, stderr) {
// ...
});

除了我无法再访问原始(二进制)数据。当我打电话时

fs.writeFileSync('foo.dat', stdout);

该流将采用 utf8 编码,导致文件大小约为 180 字节,而不是预期的 100 字节。

可以通过向 exec 传递第二个参数来规避此问题:

{ encoding: 'binary' }

不幸的是,文档说这已被弃用。

这样做的正确方法是什么?或者我绝对需要自己缓冲吗?

最佳答案

从技术上讲,您应该能够将“缓冲区”作为编码传递,并让它专门输出一个缓冲区,但看起来情况并非如此。我有opened a ticket for it这应该在 v0.12 发布之前修复。

暂时可以随意使用二进制编码。它只是被弃用了,但永远不会消失。在 v0.11 it received some love现在是 latin1 编码的同义词。 v8 正式支持该功能,因此支持不会很快消失。

关于node.js - 从 Node.js 中的 shell 脚本读取二进制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17563977/

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