簡體   English   中英

如何在nodeJS中運行鏈式命令?

[英]How to run chained commands in nodeJS?

我想制作一個“包裝器”腳本,它將自動執行對系統中文件執行的一些命令。 我想運行命令 A 來獲取輸出,然后用它來運行命令 B。

這是我被困的地方:

async function start() {
    const {exec} = require('child_process');
    await exec('adb shell getprop ro.product.cpu.abi', (err, stdout, stderr) => {
        if (err) {
            console.log(err);
            return;
        }

        var arch = stdout; // x86 
        console.log(stdout);
    });

    await exec('echo ' + arch, (err, arch, stderr) => {
        if (err) {
            console.log(err);
            return;
        }
        console.log(global.arch);
    });
}

start().then();

任何幫助將不勝感激!

您可以使用 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);
    });

我不確定你真正需要什么。 但是子進程可能有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 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.stdin.pipe(write)

現在您可以在控制台中輸入。 所有鍵入的符號都將存儲在“write-here.md”文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM