在perl
中,如果您需要运行批处理文件,可以通过以下语句完成。
system "tagger.bat < input.txt > output.txt";
此处,tagger.bat
是批处理文件,input.txt
是输入文件,output.txt
是输出文件。
我想知道是否可以在Node.js
中完成此操作?如果是,怎么样?
答案 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}}