如何在客户端服务器 Web 交互期间执行 Python 代码

How to Execute Python Code During Client Server Web Interaction

我目前正在使用 Java Servlet 和 Python 编写客户端/服务器 Web 应用程序。尽管我在客户端交互方面遇到问题,但主要是在生成输入方面。生成输入需要通过在客户端本地执行 python 脚本修改用户输入的数据,然后通过 POST 请求提交给 Servlet 服务器。之后,Servlet 会将接收到的数据传递给另一个 python 脚本服务器端,以验证给定输入的有效性。 Python 在这个过程中是必需的,因为计算量很大 (2^4096) 位长

所以我真正想问的是;

当用户访问带有表单的网页,填写表单然后单击提交按钮时,我如何从表单字段中提取数据,将内容传递到我的本地 python 脚本作为输入参数,执行 python 脚本。然后 return 来自 python 脚本的新计算数据返回到 Web 浏览器,用于 POST 对服务器的请求。

这里有两种可能性:

1) Java 作为控制器

从您的 Java Servlet 获取表单数据:

String Form_text_data = request.getParameter("text_input");

如果有很多字段,您可以实例化一个 StringBuilder(包含您需要的所有请求的文件)以获得所有目标字段答案的一个字符串 - 请务必在将这些字段添加到您的 String Builder 之前对这些字段进行健全性检查.

然后将您的字符串结果从字符串生成器传递到具有 exec 方法的运行时 class :

StringBuilder Python_script_command = new StringBuilder("python PATH/TO/YOUR/PYTHON_SCRIPT.py");

Python_script_command.append(Form_text_data) // Repeat this as many time as you wish for each form fields, but be sure to make sanity check before to avoid any injections that you do not want

Process p = Runtime.getRuntime().exec(Python_script_command.toString());

您可以通过以这种方式绑定它来读取输出:

       BufferedReader stdInput = new BufferedReader(new 
             InputStreamReader(p.getInputStream()));

        BufferedReader stdError = new BufferedReader(new 
             InputStreamReader(p.getErrorStream()));

    // read the output from the command
    System.out.println("Here is the standard output of the command:\n");
    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }

详情请看这篇文章:

http://alvinalexander.com/java/edu/pj/pj010016

2) 从 python API 框架执行,例如 FLASK

您还可以直接在 python 中构建 REST API,当用户提交表单时,您通过 POST 请求将其发送到您的 python 应用程序

然后提取您需要的数据非常简单:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    default_name = '0' 
    data = request.form.get('input_name', default_name) #here is an example on one data getter from a form field

有关详细信息,请参阅此答案 ()

然后直接在 python 中使用此数据,再次进行各种完整性检查