2013-03-12 6 views
0

RPi에 꽤 표준 램프 설치가 있습니다.버튼에서 비동기 python 스크립트 실행

표시기와 버튼이있는 html 인터페이스가 있습니다. Jquery를 사용하여 서버 쪽 텍스트 파일을 지표로 읽으며 단추에 표시기를 조정하려고합니다.

내 구현은 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가 명령의 아주 기본적인 세트가 포함되어 있습니다 .