如何从客户端执行 Python 代码
虽然在操作系统层面通过 Popen 命令执行任意 Python 脚本是可行的,
但我们首先演示 服务端模块 [F8] 代码的使用方法。
你可以调用 server 方法向服务端发送请求, 以执行在实体项的服务端模块中定义的函数。
在下方示例中,我们创建了一个 jQuery 对象类型的 btn 按钮,随后通过其点击事件绑定一个函数,
该函数会调用实体项的 server 方法,
运行在实体项的服务端模块中定义的 calculate 函数。
客户端模块中的代码如下:
function on_view_form_created(item) {
var btn = item.add_view_button('Calculate', {type: 'primary'});
btn.click(function() {
item.server('calculate', [1, 2, 3], function(result, error) {
if (error) {
item.alert_error(error);
}
else {
console.log(result);
}
})
});
}
在服务端中的代码如下:
def calculate(item, a, b, c):
return a + b + c
要执行操作系统脚本,我们可以使用带有 Popen 和类似于上面的按钮的服务器端模块代码:
build = Popen([make, 'html'] , cwd=build_path, stderr=STDOUT,stdout = PIPE, shell=shell)
result, err = build.communicate()
result = result.decode("utf-8")
要查看构建结果,我们可以使用带有按钮的 JavaScript 模态表单来显示它:
item.edit_form.find("#build-info-btn").hide().click(function() {
show_build_info(item);
});
function show_build_info(item) {
var i = 0,
color,
html = '<p>',
info = item.build_result.split('\n');
for (i = 0; i < info.length; i++) {
color = '#333333';
if (build_problems(item, info[i])) {
color = 'red';
}
html += '<span style="color: ' + color + ';">' + info[i] + '</span><br>';
}
html += '</p>';
html = $(html).css("margin", 20);
task.message(html, {width: 700, height: 600,
title: 'Build information', footer: false, print: true});
}
在这个例子中,用 Sphinx 的 make 命令来构建 Jam.py 的文档。