2013-03-12 11 views
0

У меня довольно стандартная установка LAMP на RPi.Асинхронный запуск скрипта python с кнопки

У меня есть html-интерфейс с индикаторами и кнопками. Я использую Jquery для чтения текстовых файлов на стороне сервера в индикаторы и хотел бы, чтобы кнопки настраивали индикаторы.

Моя реализация - это форма с кнопками, которые запускают скрипт python через cgi. Идея заключается в том, чтобы скрипты python редактировали файл, который jquery считывает в индикаторы. Другие сценарии запускаются на сервере, которые читают текстовый файл в аппаратном управлении, поэтому этот промежуточный файл важен.

Проблема в том, что выполнение скрипта python перенаправляет страницу. Мне просто нужно, чтобы сценарий выполнялся тихо.

Спасибо. C

ответ

0

Ответ здесь - либо cgi, либо wsgi через довольно тривиальный вызов ajax. Забавно оглядываться назад на этот вопрос, оглядываясь назад.

JQuery, в этом случае, чтобы выполнить запрос на SQLite базе данных:

function wsgiCallbackTableData (database,table,callback) { 
    // Get the data 
    //alert(database + ' ' + table + ' ' + callback) 
    $.ajax({ 
     url: "/wsgisqlitequery", 
     type: "post", 
     datatype:"json",       
     data: {'database':database,'table':table}, 
     success: function(response){ 
      //alert("I worked"); 
      // Execute our callback function 
      callback(response);          
     } 
    });  
} 

Питон:

def application(environ, start_response): 

import cgi 
import json 
from pilib import dynamicsqliteread, sqlitequery 

post_env = environ.copy() 
post_env['QUERY_STRING'] = '' 
post = cgi.FieldStorage(
    fp=environ['wsgi.input'], 
    environ=post_env, 
    keep_blank_values=True 
) 

formname=post.getvalue('name') 
data={} 
d={} 
for k in post.keys(): 
    d[k] = post.getvalue(k) 

status = '200 OK' 

# Run stuff as requested 

if 'length' in d:     # Handle table row subset 
    data=dynamicsqliteread(d['database'],d['table'],d['start'],d['length']) 
elif 'row' in d:     # Handle table row 
    data=dynamicsqliteread(d['database'],d['table'],d['row']) 

elif 'table' in d:     # Handle entire table 
    data=dynamicsqliteread(d['database'],d['table']) 
elif 'query' in d:       # Take plain single query 
    result=sqlitequery(d['database'],d['query']) 
    data=result 
elif 'queryarray[]' in d:   # Take query array, won't find 
    result=[] 
    for query in d['queryarray[]']: 
     result.append(sqlitequery(d['database'],query)) 
    data=result 
else: 
    data=['empty'] 

output = json.dumps(data,indent=1) 

response_headers = [('Content-type', 'application/json')] 
start_response(status,response_headers) 

return [output] 

pilib содержит довольно базовый набор SQLITE команд упакованных в динамический вызов ,

Смежные вопросы