Node.js 如何运行带有输入和输出的批处理文件

Node.js 如何运行带有输入和输出的批处理文件

在本文中,我们将看到如何在Node.js中运行带有输入和输出文件的批处理文件。批处理文件是一个按顺序存储要执行的命令的脚本文件。

Node.js是异步的,它不会等待批处理文件执行完成。相反,它调用定义批处理文件执行时间的函数,并尝试打印数据,即使尚未获取到数据。

解决方案: 解决方案是使用一个名为Child Process的Node.js模块。Child Process包含一个名为’spawn’的方法,以异步方式派生子进程,而不会阻塞Node.js

让我们一步步看完整的过程。

步骤1: 创建一个文件夹,文件夹内创建app.js文件、input.txt文件和bash.sh文件。在input.txt文件和bash.sh文件中写入下面给出的代码。

input.txt

Hello Geeks!

bash.sh

#!/bin/bash
input=`cat -`
echo "Input: $input"

步骤2: 将此文件夹定位到终端,并键入命令。

npm init -y

它初始化了我们的node.js应用程序。

步骤3: 在项目中使用以下命令安装Child Process模块

node install child_process

步骤4:‘app.js’ 文件中,引入Child Process模块,并创建一个常量 ‘bash_run’ 用于执行bash文件。

const childProcess = require("child_process");

const bash_run = childProcess.spawn(
'/bin/bash',["test.sh"],{env: process.env});

步骤5 :现在,让我们使用 ‘stdout’ 方法来打印结果,并使用 ‘stderr’ 来打印错误。

bash_run.stdout.on('data', function (data) {
   console.log('stdout: ' + data);
});

bash_run.stderr.on('data', function (data) {
   console.log('stderr: ' + data);
});

步骤6: 现在,使用 文件系统模块 分别为输入文件和输出文件创建读取和写入流。然后,我们将使用之前创建的 bash_run 方法将输入文本文件的结果发送到输出文本文件。

const fs = require("fs");

const input = fs.createReadStream("input.txt");
const output = fs.createWriteStream("output.txt");

bash_run.stdout.pipe(output);
input.pipe(bash_run.stdin);

完整代码:

app.js

const childProcess = require("child_process"); 
  
const bash_run = childProcess.spawn('/bin/bash',  
    ["bash.sh"], { env: process.env }); 
  
bash_run.stdout.on('data', function (data) { 
    console.log('stdout: ' + data); 
}); 
bash_run.stderr.on('data', function (data) { 
    console.log('stderr: ' + data); 
}); 
  
const fs = require("fs"); 
  
const output = fs.createWriteStream("output.txt"); 
const input = fs.createReadStream("input.txt"); 
  
bash_run.stdout.pipe(output); 
  
input.pipe(bash_run.stdin);

运行应用的步骤: 打开终端并输入以下命令。

node app.js

输出:

Node.js 如何运行带有输入和输出的批处理文件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程