【问题标题】:How to get the input from other's file stdout?如何从其他人的文件标准输出中获取输入?
【发布时间】:2019-03-05 07:47:18
【问题描述】:

例如,

我在一个文件中有这个 sn-p 代码(假设它叫做 ma​​in.js):

function main(){

    console.log(5);
}

我还有另一个文件,我想从 ma​​in.js 中获取标准输出。

我当前的代码是:

var readline = require('readline');
const fs = require('fs');

var rl = readline.createInterface({
input : fs.createReadStream("./src/main.js",{encoding: "utf8"}),
output: process.stdout,
terminal: false
})   


rl.on('line',parseCB)
function parseCB (line) {
      process.stdout.write(line+'\n')  //<--- what you expect rl.write to do.
}

但问题是 createReadStream 获取的是整个文件内容。我怎么能只从 ma​​in.js 获取 stdout 作为第二个文件的输入?

【问题讨论】:

  • 标准输出是什么意思?你想使用 node script.js 调用脚本,然后在另一个文件中获取 stout 吗?

标签: javascript node.js filestream stdio


【解决方案1】:

要让您的脚本在标准输出上输出,您需要以某种方式执行它。不过,您的第一个问题是执行 main.js 实际上不会输出任何内容。您定义了main(),但您需要在某处显式调用该函数:

function main(){

    console.log(5);
}

main();

现在,如果您运行 node main.js,您会在标准输出上获得预期的 5

这里有两个选项可以在另一个脚本中访问该输出。

方案一:将 main.js 作为 script.js 的子进程执行

//script.js

const { exec } = require('child_process');
const child = exec('node main.js', (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  process.stdout.write('Executed main.js and got: ' + stdout)
});

运行node script.js会输出:Executed main.js and got: 5

选项 2:执行 main.js 并将其输出通过管道传输到 script.js

//script.js

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false,
});

rl.on('line', (line) => {
  console.log(`Read line: ${line}`);
});

运行node main.js | node script.js会输出:Read line: 5

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2020-02-12
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2012-01-25
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多