如何使用裸脚本正确捕获Python中节点js脚本的错误?

如何使用裸脚本正确捕获Python中节点js脚本的错误?,python,node.js,django,amp-html,Python,Node.js,Django,Amp Html,我正在使用前面提到的裸Python库来执行Nodejs脚本,该脚本也可用。关键是,无论何时通过终端运行python脚本(完全取自上面的链接),我都可以看到nodejs脚本的输出。我将这个python脚本包括到Django服务器中,并在进行API调用时运行它 当页面验证失败时,我无法正确捕获错误。它总是返回“成功”。我觉得这是因为Nodejs是异步的。如果是这样,我如何使npm网站中提到的函数'AmftmlValidator.getInstance().then(函数(验证器)'同步?我对Node

我正在使用前面提到的裸Python库来执行Nodejs脚本,该脚本也可用。关键是,无论何时通过终端运行python脚本(完全取自上面的链接),我都可以看到nodejs脚本的输出。我将这个python脚本包括到Django服务器中,并在进行API调用时运行它

当页面验证失败时,我无法正确捕获错误。它总是返回“成功”。我觉得这是因为Nodejs是异步的。如果是这样,我如何使npm网站中提到的函数'AmftmlValidator.getInstance().then(函数(验证器)'同步?我对Nodejs真的非常陌生

实际上,我只需要在Django中验证python脚本中的AMP页面,我找到的唯一方法是通过python调用节点脚本。一切正常,但我无法正确捕获错误。
请提供帮助。

我通过将“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);
}
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")

您的javascript确实是异步的(
.then(function()…)
),但会立即将
True
返回到您的python脚本中子句是异步发生的,无法回调到python中。据我所知,您不可能想要什么。您必须重新编写AmftmlValidator代码以实现同步。也许您最好使用第三方API服务直接从python检查文档?是的,我只需要验证AMP页面(HTML代码)从python开始,由于amphtml验证器仅对Node可用,我想从python调用nodejs脚本。这在控制台上运行得非常好,但是当在服务器上运行时,Node脚本会像您所说的那样立即为我提供正确的消息。我向任何其他库开放以验证AMP页面。现在可以清除了。抱歉我这里没有建议。