当前位置: 首页 > 面试题库 >

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

金子轩
2023-03-14
问题内容

因此,已经有一个必须在控制台上运行的Python程序设置了。我将使用Javascript为应用程序构建Web GUI界面。我将如何:

一种。开始处理此Python程序的输入/输出,而无需触摸原始代码。

b。通过Javascript调用将控制台输入发送到Python程序。我已经研究了原始的HTTP请求/
AJAX,但不确定如何将其作为输入发送到Python程序。


问题答案:

一种。处理程序的输入/输出:Pexpect。它相当容易使用,阅读其中随附的一些示例应该足以使您掌握基础知识。

b。JavaScript介面:

好吧,我使用gevent及其内置的WSGI服务器。(查找WSGI服务器(另一个)是什么)。我应该注意,该程序将保持状态,因此您可以通过将会话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", [("Content-Type", "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", [("Content-Type", "text/html; charset=utf-8")])
        return "Success"
    elif i==1:
        start_response("500 Internal Server Error", [("Content-Type", "text/html; charset=utf-8")])
        return "Failure"
    elif i==2:
        start_response("500 Internal Server Error", [("Content-Type", "text/html; charset=utf-8")])
        return "Error"

我建议的另一个选择是Nginx + uWSGI。如果您愿意,我也可以举一些例子。它为您带来了将Web服务器合并到设置中的好处。



 类似资料:
  • 当涉及到TCP时,Netty确实有很好的文档记录,但我想尝试一个简单的UDP服务器-客户机示例,但没有找到任何好的代码。(主要是邮件列表和据称有错误代码的用户) 有人愿意提供一些简单的例子吗?谢谢!

  • 我使用的是hazelcast v3。2.4客户-

  • websocket客户端(使用Autobahn/Python和Twisted)需要连接到websocket服务器:客户端需要向服务器提供其客户端证书,客户端需要检查服务器的证书。例如,这些证书是在Kubernetes minikube安装过程中创建的。特别地: 服务器证书(据我所知为X509格式) 客户端证书~/。minikube/客户。按键 我已经检查过,我可以成功地使用这些证书密钥使用发出库伯

  • 因此,在这个问题之后(如何将TCP-IP客户端服务器插入Spring MVC应用程序),我成功地将网关连接到我的Spring REST控制器。但是,我不知道下一步该去哪里。这是我试图完成的: 1)当某个路由被POST请求击中时,打开从POST传递的某个IP的连接(或使用已使用此IP打开的连接)并发送消息。 2)我还需要我的Spring后端来监听传递给它的TCP“消息”,并将它们存储在缓冲区中。我的

  • 问题内容: 我正在尝试在Java中的服务器和JavaScript客户端之间建立连接,但在客户端出现此错误: WebSocket与“ ws://127.0.0.1:4444 /”的连接失败:在收到握手响应之前,连接已关闭 由于可能从未调用该函数,因此它可能保持在OPENNING状态。该不会被调用。 有人可以让我知道这里出了什么问题吗? 服务器 服务器线程 游戏协议 客户 问题答案: 首先,您的两个代

  • 我对客户端如何连接到其struct sockaddr_in设置为ADDRESS.sin_addr的服务器感到非常困惑。s_addr=htonl(INADDR_ANY); 绑定调用后,服务器监听套接字将被设置为INADDR_ANY,客户端将如何连接到设置为INADDR_ANY的套接字? 在connect()系统调用之前,客户端将传递到sockaddr_instruct的地址是什么?是服务器的ip地址