繁体   English   中英

尝试从 Python 运行 JavaScript

[英]Trying to run JavaScript from Python

我正在尝试从 Python 运行以下脚本。

import execjs
var request = require('request');

var apiHostName='https:/url.com';

emailAddress = 'my.email@company.com'
apiKey = 'api_key'

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("Identity with email address " + emailAddress + " found:");
    var b= JSON.parse(body);
    console.log("id="+b.identityId+",api key="+b.apiKey+",type="+b.type);
  } else{
    if (response.statusCode == 401) {
      console.log ("Couldn't recognize api key="+apiKey);
    } else if (response.statusCode == 403) {
      console.log ("Operation forbidden for api key="+apiKey);
    } else if (response.statusCode == 404) {
      console.log ("Email address " +emailAddress + " not found");
    }
  }
}

我这样做了:

pip install py-mini-racer
pip install PyExecJS

根据我所做的研究,我认为这非常接近,但我不确定。 我现在得到的只是这个错误:'SyntaxError: invalid syntax'

错误发生在这一行:'var request = require('request');'

显然,我使用的是我的实际电子邮件和 api 密钥。 我正在运行 Python 3.x。

首先,您使用的是一个库PyExecJS ,它声称不再维护,而且设计很差。

所以,这可能不是最好的选择。


其次,你用错了。

示例都包含 JS 代码作为字符串,传递给execjs.evalexecjs.compile

您试图直接内联包含 JS 代码,就好像它是 Python 代码一样。 那是行不通的; 它会尝试将 JS 代码解析为 Python 并引发SyntaxError因为它们不是同一种语言。 1

因此,您必须执行与示例相同的操作。 这可能看起来像这样:

import execjs

jscode = """
    var request = require('request');

    var apiHostName='https:/url.com';

    emailAddress = 'my.email@company.com'
    apiKey = 'api_key'

    function callback(error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log("Identity with email address " + emailAddress + " found:");
        var b= JSON.parse(body);
        console.log("id="+b.identityId+",api key="+b.apiKey+",type="+b.type);
      } else{
        if (response.statusCode == 401) {
          console.log ("Couldn't recognize api key="+apiKey);
        } else if (response.statusCode == 403) {
          console.log ("Operation forbidden for api key="+apiKey);
        } else if (response.statusCode == 404) {
          console.log ("Email address " +emailAddress + " not found");
        }
      }
    }
"""
execjs.eval(jscode)

或者,也许更好,将 JavaScript 移动到一个单独的.js文件,然后像这样运行它:

import os.path
import execjs

dir = os.path.dirname(__file__)
with open(os.path.join(dir, 'myscript.js')) as f:
    jscode = f.read()
execjs.eval(jscode)

1. 有人可以为 Python 编写一个导入钩子,它对 Python 执行类似于 perl 的Inline::PythonInline::Java等操作,允许您将来自其他语言的代码直接嵌入到您的 Python 脚本中。 每隔一段时间,有人确实尝试编写这样的东西,但他们似乎总是在它甚至生产就绪之前就放弃它作为一个坏主意,或者将其重新设计为更像PyExecJS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM