[英]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);
});
我不確定你真正需要什么。 但是子進程可能有stderr
、 stdin
、 stdout
流。 您可以通過 pipe() 方法鏈接流。
streamA.pipe(streamB)
這意味着來自streamA
數據流入streamB
。
更新:
const { spawn } = require(“child_process”)
const ls = spawn(“ls”)
ls.stdout.pipe(process.stdout)
process.stdout
是從您的應用程序到控制台的出口。
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)
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.