澄清: 我通过Apache Web服务器将其作为cgi运行。那不是问题 我的问题是关于指定在我通过ajax请求调用Python脚本时要运行哪个函数的方法。
我读了一个教程,说要传递我想要调用的函数名。我做到了 在Python中,我尝试了
这是我的ajax功能
$(document).ready(function() {
$.ajax({
url: "monStat.py",
type: "post",
data: {'callFunc':'isRunning'},
success: function(response){
$('#blurg').html(response).fadeIn(1500);
}
});
});
这是Python
def main():
if callFunc:
funcResp = isRunning()
else:
print("No function passed")
def isRunning( process_name ):
''' the content '''
答案 0 :(得分:4)
您需要使您的脚本具备网络功能。我没有使用过CGI,所以这里有Flask的例子:
from flask import Flask, request
app = Flask(__name__)
@app.route('/is_running', methods=['POST'])
def isRunning():
process_name = request.values.get('name', None)
''' the content '''
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
现在,您只需向/is_running
发送请求:
$.ajax({
url: "/is_running",
type: "post",
data: {'name': 'ls'},
success: function(response){
$('#blurg').html(response).fadeIn(1500);
}
});
答案 1 :(得分:1)
即使你没有提到你正在使用什么样的Web框架(如果有的话),我将从你的url命名中假设你试图在服务器上直接调用python脚本。
此方法的唯一方法是将monStat.py
脚本结构化为CGI script,并相应地托管在服务器上(以执行CGI脚本的方式)。您的javascript意味着您要对此脚本发出POST请求,因此您的python脚本需要接受POST请求,然后读取参数并对其进行操作。你不能只在javascript中将一个callable命名为一个字符串,并让CGI脚本自动知道要运行什么。这是Web框架提供高级URL处理的地方。
如果你试图通过url调用常规python脚本,那就不行了。最基本的原始方法是使用python CGI module。这对于刚学习和入门很有帮助,但这是一种非常低效和过时的方法。您应该查看一个Web框架:Python WebFrameworks
<强>更新强>
如你所说,你实际上正在使用CGI脚本......
使用Web框架时,“路由”是免费获得的。它将传入的请求带入主循环并决定应该在哪里处理。当您使用仅 CGI时,您必须自己完成此操作。每次向CGI脚本发出请求时,它都会像普通脚本一样执行,并具有正常的入口点。
在该入口点,您必须阅读该请求。如果请求是POST并包含“is_running”,那么您可以将该请求转发给is_running()
处理程序。 “函数名称”只是字符串数据。由您的代码来读取请求并确定要执行的操作。
以下是一个非常粗略的示例,它可能会将一些可接受的处理程序映射到您允许的函数:
#!/usr/bin/env python
import cgi
import cgitb
cgitb.enable()
def isRunning(form):
print "Content-Type: text/html\n"
print "isRunning()"
print form.getvalue('name')
def _error(*args):
print "Content-Type: text/html\n"
print "Error"
HANDLERS = {
'isRunning': isRunning
}
def main():
form = cgi.FieldStorage()
h_name = form.getvalue('callFunc')
handler = HANDLERS.get(h_name, _error)
handler(form)
if __name__ == "__main__":
main()
答案 2 :(得分:0)
这是一个开始:
import cgi
fs = cgi.FieldStorage()
print "Content-type: text/plain\n"
for key in fs.keys():
print "%s = %s" % (key, fs[key].value)