如何拦截 node.js 中命令的输出流并将其保存到变量?
How to intercept and save to a variable the output streaming of a command in node.js?
我有这个脚本可以正确地 运行 同步 ls
命令并将结果输出到终端。如何截取结果并将其保存到变量中?
const cp = require('child_process');
const result = cp.spawnSync(
'ls',
['-l', '/usr'],
{ stdio: [process.stdin, process.stdout, process.stdout] }
);
如果我按照
的建议尝试这个
result.stdout.on('data', function (chunk) {
console.log(chunk);
});
我明白了
result.stdout.on('data', function (chunk) {
^
TypeError: Cannot read property 'on' of null
区别在于 spawnSync
而不是 spawn
通过查看 docs 我们可以看到 spawnSync
returns 的结果包含一个名为 stdout
的键的对象,它是一个 Buffer
.您不必监听事件,因为您正在调用 spawn
的同步版本 - 进程将等待命令完成执行后再继续,然后 returns 结果。
所以在你的情况下,你的 ls -l /usr
命令的结果可以用 result.stdout.toString()
读取。您还需要在选项中保留 stdio
的默认配置。
我有这个脚本可以正确地 运行 同步 ls
命令并将结果输出到终端。如何截取结果并将其保存到变量中?
const cp = require('child_process');
const result = cp.spawnSync(
'ls',
['-l', '/usr'],
{ stdio: [process.stdin, process.stdout, process.stdout] }
);
如果我按照
的建议尝试这个result.stdout.on('data', function (chunk) {
console.log(chunk);
});
我明白了
result.stdout.on('data', function (chunk) {
^
TypeError: Cannot read property 'on' of null
区别在于 spawnSync
而不是 spawn
通过查看 docs 我们可以看到 spawnSync
returns 的结果包含一个名为 stdout
的键的对象,它是一个 Buffer
.您不必监听事件,因为您正在调用 spawn
的同步版本 - 进程将等待命令完成执行后再继续,然后 returns 结果。
所以在你的情况下,你的 ls -l /usr
命令的结果可以用 result.stdout.toString()
读取。您还需要在选项中保留 stdio
的默认配置。