node.js:使用系统调用将文件写入/tmp 目录时遇到问题

标签 node.js

作为练习,我尝试使用 node.js 中的系统调用将一个小文本文件写入/tmp 目录。这是我的代码:

#!/bin/node
var child_process = require("child_process");
var send = "Hello, world!";
child_process.exec('cat - > /tmp/test1', { input: send });

文件实际上被创建了;但是,其中没有放置任何内容。事情就这么悬着。有人可以告诉我我错过了什么吗?

另外,我真的很想知道如何同步执行此操作。

感谢您的任何意见。

 ... doug 

最佳答案

嗯,除非我也忘记了 rtm,否则这段代码永远不会工作。 cp.exec 没有这样的输入选项。

但是有一个 stdio 选项,可以让我们在子进程上打开预期的 stdio。

child_process.exec('cat - > /tmp/test1', { stdio: 'pipe' });

参见https://nodejs.org/api/child_process.html#child_process_options_stdio

stdio不是字符串,它们是流,我们可以结束/写入/管道/关闭/推送等

参见https://nodejs.org/api/stream.html

请注意,stdin 是可写的,stdout/stderr 是可读的。

要编写 cat 的标准输入,您现在将使用 cp.stdin 对象并调用其 end() 方法。

child_process.exec('cat - > /tmp/test1', { stdio: 'pipe' }).stdin.end('hello world');

请注意,end 方法是写入后终止流,这是告诉 cat 退出所必需的。

为了确保其正常工作,我们应该重构它,不要将 stdin 发送到文件,而是通过管道将 child.stdout 发送到 process.stdout。

var child_process = require('child_process');
var cp = child_process.exec('cat -', { stdio: 'pipe' });
cp.stdin.end('hello world');
cp.stdout.pipe(process.stderr);

请注意,该进程是全局的。

关于node.js:使用系统调用将文件写入/tmp 目录时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106026/

相关文章:

javascript - 在没有轮询器的情况下基于 MySQL 数据库创建 Node.js 仪表板

node.js - Sequelize - Where 子句使用包含的模型属性

javascript - 从 Express 路由器中排除公用文件夹

javascript - 无法通过 sequelize.authenticate() 方法使用异步等待

node.js - "helix"期间NodeJs的 "idle time"

node.js - 是否可以在浏览器中使用路径模块?

javascript - 在 Node.js 中混合使用 JavaScript 和 TypeScript

node.js - 我可以使用 Firebase Cloud Functions 隐藏 JavaScript 代码吗?

javascript - Waterline ORM 中的继承

node.js - 如何使用 Node.js 获取 Amazon S3 存储桶的总大小?