如何在nodeJS中运行链接命令?

时间:2019-05-23 09:08:15

标签: node.js

我想制作一个“包装器”脚本,该脚本将自动执行对系统文件的一些命令。我想运行命令A以获取输出,然后使用它来运行命令B。

在这里我被困住了:

protected void Page_Load(object sender, EventArgs e)
{
    if(Request.QueryString.Contains("showError") && Request.QueryString["showError"].ToLowerCase() == "true")
    {

        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Account not recognised.')", true);
    }
}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以使用async / await链接某些函数,并将一个命令的输出传递给另一个命令

const {spawn} = require('child_process');

async function exec1() {
    const child = spawn('ls');

    let ret = '';

    for await (const data of child.stdout) {
        ret += data;
    }
    return ret;
}

async function exec2(out) {
    console.log(out);
    const child = spawn('ls');

    let ret = '';

    for await (const data of child.stdout) {
        ret += data;
    }
    console.log(ret);
}

exec1()
    .then(exec2);

或根据需要将第一个函数的值存储到变量中

let output;

exec1()
    .then(out => {
        output = out;
        exec2(out);
    });

答案 1 :(得分:0)

我不确定您的真正需求。但是子进程可能具有stderrstdinstdout流。您可以通过pipe()方法链接流。

streamA.pipe(streamB)

这意味着来自streamA的数据流入streamB

已更新:

  1. 如果您需要在控制台中编写结果:
    const { spawn } = require(“child_process”)

    const ls = spawn(“ls”)

    ls.stdout.pipe(process.stdout)

process.stdout是您的应用退出到控制台的方式。

  1. 如果您需要执行ls | grep index
    const { spawn } = require(“child_process”)

    const ls = spawn(“ls”)
    const grep = spawn(“grep”, [“index”])

    ls.stdout.pipe(grep.stdin)
    grep.stdout.pipe(process.stdout)
  1. 如果您想直接从控制台输入文件
    const {createWriteStream} = require(“fs”)

    const write = createWriteStream(“./write-here.md”)

    process.stdout.pipe(write)

现在您可以输入控制台。所有键入的符号将存储在“ write-here.md”文件中。

相关问题