我正在使用nodejs与我制作的casperjs脚本进行通信。 首先我会告诉你我的 Casperjs 脚本是做什么的。 我已经用命令行输入进行了设置。 我运行这个命令
casperjs script.js "Inputdata1" "inputdata2"
然后该脚本执行并访问我的一台服务器并提交输入数据 1 和 2。
然后等待服务器响应并将一行授予 10 个文本文件之一的权限 取决于脚本从我的服务器获取的结果
然后退出。这个 casperjs 脚本工作正常,没有任何问题。
现在我正在构建一个nodejs脚本来一遍又一遍地运行casperjs脚本
我的nodejs脚本假设使用readline.js读取文本文件,然后使用其中的数据对每一行执行Casperjs命令。
问题是我的脚本一次执行每次执行,但我在 casperjs 的文本文件中没有得到任何结果
我需要我的nodejs脚本来执行第一行等待Casperjs退出 然后并且只有然后才转到下一行并使用 Casperjs 执行
而且我还需要实际的 casperjs 脚本才能正常工作
这是我的nodejs脚本——我已经尝试了几天不同的代码不同的模块,但无法解决它,所以非常感谢任何帮助
var fs = require('fs'),
sleep = require('sleep'),
readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('file.txt'),
output: process.stdout,
terminal: false
});
rd.on('line', function(line) {
var exec = require('child_process').exec;
var child = exec('casperjs check.js ' + line );
child.on('close', function(code) {
console.log('closing code: ' + code);
});
});
最佳答案
您正在寻找顺序循环。即上一步完成后执行下一步。
困难来了,因为 Node.js 是异步的,并且开箱即用的顺序功能非常少。
有两个选项。
递归回调
var fs = require('fs'),
sleep = require('sleep'),
exec = require('child_process').exec,
readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('file.txt'),
output: process.stdout,
terminal: false
});
var lines = [];
rd.on('line', function(line) {
lines.push(line);
});
rd.on('end', function() {
var i=0;
if(i < lines.length) {
exec('casperjs check.js ' + lines[i], function execCallback(code) {
console.log('closing code: ' + code);
i++;
if(i < lines.length) exec('casperjs check.js ' + lines[i], execCallback);
});
}
});
具有顺序支持的异步库
有很多选项,为了举例,让我们看看异步。
var fs = require('fs'),
sleep = require('sleep'),
exec = require('child_process').exec,
async = require('async'),
readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('file.txt'),
output: process.stdout,
terminal: false
});
var q = async.queue(function (task, callback) {
var child = exec('casperjs check.js ' + task.line );
child.on('close', function(code) {
callback(code);
});
}, 1);
rd.on('line', function(line) {
q.push({line: line}, function (code) {
console.log('closing code: ' + code + line);
JSON.stringify();
});
});
未测试,因此您可能需要修复拼写错误(如果有)。
关于node.js - Nodejs Childexec 对文件中的每一行执行命令,但等待第一个命令退出,然后再运行下一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022770/