如何使用JavaScript客户端设置Python服务器端

前端之家收集整理的这篇文章主要介绍了如何使用JavaScript客户端设置Python服务器端前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以已经有一个 Python程序设置在运行在我必须建立的控制台上.我将使用 Javascript构建应用程序的Web GUI界面.
我将如何

一个.关于处理这个Python程序的输入/输出,而不用触摸原始代码.

湾通过Javascript调用发送控制台输入到Python程序.我已经研究了原始的HTTP请求/ AJAX,但我不知道我将如何将它作为Python程序的输入发送.

解决方法

一个.要处理程序的输入/输出Pexpect.它是相当容易使用,并阅读一些分发的示例应该教你足够的基础知识.

湾Javascript界面​​:

那么我使用gevent,它是内置的WSGI服务器. (查看一个WSGI server(another)是什么).我应该注意到,这个程序将保持一个状态,所以你可以通过返回一个会话ID到你的JavaScript客户端,并将你的pexpect会话存储在一个全局变量或一些其他容器中来管理你的开放会话,这样你可以完成程序的输入和输出跨多个独立的AJAX请求.然而,我离开你,因为那不是那么简单.

我所做的一切例子都是将POST请求放在一些点击你所选择的内容之后. (它不会实际工作,因为一些变量没有设置.)

相关部分:

<!-- JavaScript -->
<script src="jquery.js"></script>
<script type="text/javascript">
function toPython(usrdata){
    $.ajax({
        url: "http://yoursite.com:8080",type: "POST",data: { information : "You have a very nice website,sir.",userdata : usrdata },dataType: "json",success: function(data) {
            <!-- do something here -->
            $('#somediv').html(data);
        }});
$("#someButton").bind('click',toPython(something));
</script>

然后服务器:

# Python and Gevent
from gevent.pywsgi import WSGIServer
from gevent import monkey
monkey.patch_all() # makes many blocking calls asynchronous

def application(environ,start_response):
    if environ["REQUEST_METHOD"]!="POST": # your JS uses post,so if it isn't post,it isn't you
        start_response("403 Forbidden",[("Content-Type","text/html; charset=utf-8")])
        return "403 Forbidden"
    start_response("200 OK","text/html; charset=utf-8")])
    r = environ["wsgi.input"].read() # get the post data
    return r

address = "youraddresshere",8080
server = WSGIServer(address,application)
server.backlog = 256
server.serve_forever()

如果你的程序是面向对象的,那么这样做是很容易的.编辑:不需要面向对象.现在我已经包含了一些Pexpect代码

global d
d = someClass()
def application(environ,start_response):
    # get the instruction
    password = somethingfromwsgi # read the tutorials on WSGI to get the post stuff
    # figure out WHAT to do
    global d
    success = d.doSomething()
    # or success = funccall()
    prog = pexpect.spawn('python someprogram.py')
    prog.expect("Password: ")
    prog.sendline(password)
    i = prog.expect(["OK","not OK","error"])
    if i==0:
        start_response("200 OK","text/html; charset=utf-8")])
        return "Success"
    elif i==1:
        start_response("500 Internal Server Error","text/html; charset=utf-8")])
        return "Failure"
    elif i==2:
        start_response("500 Internal Server Error","text/html; charset=utf-8")])
        return "Error"

我建议的另一个选择是Nginx uWSGI.如果你愿意,我可以给你一些例子.它为您提供将Web服务器并入设置中的好处.

原文链接:https://www.f2er.com/js/154765.html

猜你在找的JavaScript相关文章