如何在Node.js中用input运行batch file并获得输出

perl如果你需要运行一个batch file,可以通过下面的语句来完成。

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

这里, tagger.bat是一个batch file, input.txt是input文件, output.txt是输出文件。

我想知道是否有可能在Node.js完成吗? 如果是的话,怎么样?

您将需要创建一个子进程。 Unline Python,node.js是异步的,意味着它不会等待script.bat完成。 相反,它调用script.bat打印数据时存在的函数:

 // Child process is required to spawn any kind of asynchronousous 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); }); 

除了将事件分配给进程外,还可以将流stdinstdout连接到其他流。 这意味着其他进程,HTTP连接或文件,如下所示:

 // 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); 

然后我们做一个测试bash脚本test.sh

 #!/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. 

在Windows上的过程将是类似的,我只是觉得你可以直接调用批处理文件:

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