我正在使用提到的here的Python裸体库来执行Nodejs脚本,该脚本也here也可用。关键是,每当我通过终端运行我的python脚本(完全来自以上链接)时,我都可以看到nodejs脚本的输出。我将此Python脚本包含在Django服务器中,并在进行API调用时运行它。
页面验证失败时,我无法正确捕获错误。它总是返回“成功”。我觉得这是因为Nodejs是异步的。如果是这样,我该如何使npm网站中提到的函数'amphtmlValidator.getInstance()。then(function(validator)')进行同步?我对Node.js真的很陌生。
实际上,我只需要从Django中的python脚本验证AMP页面,我发现的唯一方法是通过python调用node脚本。一切正常,但是我无法正确捕获错误。 请帮忙。
答案 0 :(得分:0)
我通过将“ getInstance()”代码写入异步函数来解决此问题,然后添加了2秒的睡眠时间,以确保将所有数据写入控制台。如果节点脚本中出现任何错误,我将手动添加关键字“ ERROR”,否则我将添加“ PASS”。
每当我使用Python执行此脚本时,我都会检查关键字。我知道这个答案不好,但是我可以管理正常的工作。 这是我所做的:
节点脚本:
function sleep(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
// async function that accepts a html file content and validates
async function validation(file) {
//console.log(file);
amphtmlValidator.getInstance().then(
function(validator) {
var result = validator.validateString(file);
if (result.status === 'PASS') {
console.log("PASS")
} else {
for (var ii = 0; ii < result.errors.length; ii++) {
var error = result.errors[ii];
var msg = 'ERROR : ' + 'line ' + error.line + ', col ' + error.col + ': ' + error.message;
console.log(msg);
}
}
});
await sleep(2000);
}
Python:
response = muterun_js("validate.js", args)
if response:
if "ERROR" in response.stdout.decode():
print("validation failed")
elif "PASS" in response.stdout.decode():
print("success")