如何使用输入在Node.js中运行批处理文件并获取输出

时间:2015-10-13 08:35:21

标签: javascript node.js windows batch-file

perl中,如果您需要运行批处理文件,可以通过以下语句完成。

system "tagger.bat < input.txt > output.txt";

此处,tagger.bat是批处理文件,input.txt是输入文件,output.txt是输出文件。

我想知道是否可以在Node.js中完成此操作?如果是,怎么样?

1 个答案:

答案 0 :(得分:4)

您需要创建子进程。取消使用Python,node.js是异步的,这意味着它不会等待script.bat完成。相反,它会在// Child process is required to spawn any kind of asynchronous process var childProcess = require("child_process"); // This line initiates bash var script_process = childProcess.spawn('/bin/bash',["test.sh"],{env: process.env}); // Echoes any command output script_process.stdout.on('data', function (data) { console.log('stdout: ' + data); }); // Error output script_process.stderr.on('data', function (data) { console.log('stderr: ' + data); }); // Process exit script_process.on('close', function (code) { console.log('child process exited with code ' + code); }); 打印数据或存在时调用您定义的函数:

stdin

除了为流程分配事件外,您还可以将流stdout// Pipe input and output to files var fs = require("fs"); var output = fs.createWriteStream("output.txt"); var input = fs.createReadStream("input.txt"); // Connect process output to file input stream script_process.stdout.pipe(output); // Connect data from file to process input input.pipe(script_process.stdin); 连接到其他流。这意味着其他进程,HTTP连接或文件,如下所示:

test.sh

然后我们只制作一个测试bash脚本 #!/bin/bash input=`cat -` echo "Input: $input"

input.txt

测试文字输入 Hello world.

node test.js

运行stdout: Input: Hello world. child process exited with code 0 后,我们在控制台中获取此信息:

output.txt

这是 Input: Hello world.

var script_process = childProcess.spawn('test.bat',[],{env: process.env});

Windows上的程序类似,我只是认为你可以直接调用批处理文件:

{{1}}