首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将流输送到节点中的文件描述符?

如何将流输送到节点中的文件描述符?
EN

Stack Overflow用户
提问于 2019-07-08 04:55:56
回答 1查看 599关注 0票数 1

我在节点中写一个cli,我想打开用户$EDITOR来编辑从流( http响应IncomingMessage)读取的数据。

如何将数据发送到文件描述符?

在bash中,我可以这样写:

代码语言:javascript
复制
$EDITOR <(curl $url)

代码语言:javascript
复制
$DIFF <(curl $url_1) <(curl $url_2)

<(curl $url)扩展到类似于/proc/self/fd/11的东西

代码语言:javascript
复制
echo <(curl $url)
/proc/self/fd/11

但是我该如何用javascript来写呢?

代码语言:javascript
复制
import cp from 'child_process'
const fisrt = request(...);
const second = require(...);
const first_fd = ???;
const second_fd = ???;

const proc = cp.spawn(process.env.DIFF, [first_fd, second_fd] { stdio: 'inherit' });

好的,如果stream是由套接字或fd支持的,您可以将它传递给options.stdio,但是如果它不是,那么如果它是转换流呢?

options.stdio对象-与子进程共享引用tty、文件、套接字或管道的可读或可写流。流的底层文件描述符在子进程中复制到对应于stdio数组中的索引的fd中。流必须有一个底层描述符(在“打开”事件发生之前,文件流不会这样做)。

是的,我可以创建一个临时文件,但是没有临时文件,我可以这样做吗?

EN

回答 1

Stack Overflow用户

发布于 2019-07-25 21:53:48

您可以使用以下nodejs代码将下载的内容流到终端中的vim文本编辑器中:

代码语言:javascript
复制
const { spawn } = require('child_process');
const request = require('request');
// 
request({
    url: 'https://google.com' 
}, function (err, res, body) { 
    const vi = spawn('vi', ['-'], { stdio: ['pipe', process.stdout, process.stderr] });

    vi.stdin.write(body);
    vi.stdin.end();
});

然后从您的终端,如果您执行这段代码,它将下载谷歌的html,让您编辑和保存在一个文件。您可以使用:w myfile.txt保存到vim中的文件。

关于这个问题的进一步解读:https://2ality.com/2018/05/child-process-streams.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56928613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档