likes
comments
collection
share

Python 与 Javascript 进行数据通信

作者站长头像
站长
· 阅读数 4

PythonJavaScript 是两种非常流行的编程语言,它们各自在不同的领域有着广泛的应用。 Python 以其强大的数据分析和机器学习库而闻名,而 JavaScript 则是 Web 开发中不可或缺的前端脚本语言。在某些情况下,Python 开发者可能想要写一些 JavaScript 代码在页面上更好的展示自己的训练成果,而有些时候前端开发者可能需要写一些 Python 代码实现更为智能的操作,而本文的目的就是展示在这两种语言相互调用的过程中如何实现数据的传递。

Python 与 Javascript 进行数据通信

1. Python 调用 JavaScript

Python 与 Javascript 进行数据通信

Python 中调用 JavaScript 代码通常有以下几种方法:

  1. 使用 pyjsparserpyjsparser 是一个 Python 库,它可以解析并执行 JavaScript 代码。通过这个库,我们可以直接在 Python 脚本中运行 JavaScript 代码。
from pyjsparser import parse
execjs = parse("const result = 'Hello, JavaScript!';")
print(execjs)
result = eval(str(execjs))
print(result)
  1. 使用PyV8PyV8 是另一个 Python 库,它提供了一个完整的 JavaScript 引擎。通过 PyV8 ,我们可以在Python 中执行 JavaScript 代码,并获取执行结果。
import pyv8
context = pyv8.JSContext()
result = context.execute("'Hello, JavaScript!'")
print(result)  # 输出: Hello, JavaScript!
  1. 通过命令行调用Node.jsNode.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。我们可以通过 Pythonsubprocess 模块来调用 Node.js ,并执行 JavaScript 文件。
import subprocess
result = subprocess.check_output(["node", "script.js"])
print(result.decode())  # 输出: Hello, JavaScript!

2. JavaScript调用Python

Python 与 Javascript 进行数据通信

JavaScript 中调用 Python 代码通常需要借助一些工具或者服务:

  1. 使用node-pythonnode-python 是一个 Node.js 库,它允许你在 Node.js 环境中执行 Python 代码。通过这个库,我们可以在 JavaScript 中直接调用 Python 函数。
import {PythonShell} from 'python-shell';

PythonShell.runString('x=1+1;print(x)', null).then(messages=>{
  console.log('finished');
});

或者,你可以直接执行某个 python 文件:

import {PythonShell} from 'python-shell';

let options = {
  mode: 'text',
  pythonPath: 'path/to/python',
  pythonOptions: ['-u'], // get print results in real-time
  scriptPath: 'path/to/my/scripts',
  args: ['value1', 'value2', 'value3']
};

PythonShell.run('my_script.py', options).then(messages=>{
  // results is an array consisting of messages collected during execution
  console.log('results: %j', results);
});

交换数据举例:

import {PythonShell} from 'python-shell';
let pyshell = new PythonShell('my_script.py');

// sends a message to the Python script via stdin
pyshell.send('hello');

pyshell.on('message', function (message) {
  // received a message sent from the Python script (a simple "print" statement)
  console.log(message);
});

// end the input stream and allow the process to exit
pyshell.end(function (err,code,signal) {
  if (err) throw err;
  console.log('The exit code was: ' + code);
  console.log('The exit signal was: ' + signal);
  console.log('finished');
});
  1. 通过WebSockets: 我们可以创建一个 WebSocket 服务器,用 Python 编写服务器端代码,然后在 JavaScript 中通过 WebSocket 协议与服务器通信,从而实现调用 Python 代码的目的。
// JavaScript客户端
const socket = new WebSocket('ws://localhost:8000');
socket.onopen = function() {
  socket.send('Hello, Python!');
};
socket.onmessage = function(e) {
  console.log(e.data);  // 输出: Hello, Python!
};
// Python服务器端
from websocket import create_connection
ws = create_connection("ws://localhost:8000")
ws.send("Hello, Python!")
result = ws.recv()
print(result)  # 输出: Hello, Python!
ws.close()
  1. 通过HTTP请求: 我们可以创建一个 Python Web 服务,将 Python 代码作为后端逻辑运行。然后在 JavaScript 中通过 HTTP 请求调用这个服务,间接地调用 Python 代码。
// JavaScript客户端
fetch('/python_service', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ message: 'Hello, Python!' })
})
.then(response => response.json())
.then(data => {
  console.log(data);  // 输出: Hello, Python!
});
// Python服务器端 (使用Flask框架)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/python_service', methods=['POST'])
def python_service():
    message = request.json()['message']
    print(message)  # 输出: Hello, Python!
    return jsonify(result='Hello, Python!')
app.run()

3. 总结

PythonJavaScript 虽然在不同的领域有着各自的优势,但通过一些工具和方法,它们可以相互调用,实现资源共享和功能互补。这种跨语言的互操作性为开发者提供了更多的可能性,使得他们可以更加灵活地构建应用程序和服务。在选择使用哪种方法时,需要考虑实际的需求、环境以及性能等因素,选择最适合当前项目的方案。