Py学习  »  Python

尝试从python运行javascript

ryguy72 • 4 年前 • 917 次点击  

我正在尝试从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

根据我做的研究,我认为这是非常接近的,但我不确定。我现在得到的只是这个错误:' 语法错误:无效语法'

此行出现错误:“var request=require('request');”

显然,我正在使用我的实际电子邮件和API密钥。我正在运行python 3.x。任何帮助都会受到感激。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38058
 
917 次点击  
文章 [ 1 ]  |  最新文章 4 年前
abarnert
Reply   •   1 楼
abarnert    5 年前

首先,你使用的是图书馆, PyExecJS 它声称不再需要维护,而且设计也很差。

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


第二,你用错了。

这些示例都包括将JS代码作为字符串传递给 execjs.eval execjs.compile .

您试图直接在内联中包含JS代码,就好像它是Python代码一样。这不会奏效;它将尝试将JS代码解析为python并引发 SyntaxError 因为他们不是同一种语言。

所以,你必须做与例子相同的事情。可能看起来像这样:

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编写一个导入钩子,该钩子执行类似于perl的操作 Inline::Python , Inline::Java 对于python,允许您将其他语言的代码直接嵌入到python脚本中。有时,有人确实试图写这样的东西,但他们似乎总是在它还没有准备好生产之前就把它当作一个坏主意放弃,或者重新设计它使之更像 派克塞克斯 .