在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); });
除了将事件分配给进程外,还可以将流stdin
和stdout
连接到其他流。 这意味着其他进程,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});