2014-02-20 11 views
1

我試圖從本地JavaScript文件(本地運行的HTML/JavaScript程序的一部分)運行python腳本。從Javascript調用Python腳本,都是本地文件

我一直在Google上搜索幾個小時,發現了很多解決方案,但其中沒有一個適合我。

這裏是JavaScript:

$.ajax({ 

    type: "POST", 
    url: "test.py", 
    data: { param: " "} 
    }).done(function(o) { 
     alert("OK"); 
}); 

的test.py文件是在同一文件夾中的腳本/ HTML文件。

這裏是腳本:

#!/usr/bin/python 
import os 
filepath = os.getcwd() 
def MakeFile(file_name): 
    temp_path = filepath + file_name 
    with open(file_name, 'w') as f: 
    f.write('''\ 
def print_success(): 
    print "sucesss"   
''') 
    print 'Execution completed.' 

MakeFile("bla.txt"); 

正常運行時,它工作正常。

在我的Firefox控制檯上,我收到一個「格式不正確」的錯誤,腳本沒有創建文件。但是,我可以看到Firefox會提取腳本,因爲我可以通過單擊文件名在瀏覽器中查看它。

+0

您是否在實際文件中的open()...行之後正確縮進了f.write()調用?你是否獨立於Web測試了python腳本? – jgitter

+0

是的,我已經測試過,只需雙擊腳本文件。工作正常,並創建bla.txt文件。 – Asgeir

+0

您正在運行本地HTTP服務器,還是僅在瀏覽器中打開本地HTML文件? – Anton

回答

4

爲了使Python腳本來執行它必須由通過CGI或WSGI支持它的web服務器等部署

退房這裏的文檔:webservers

1

有三個問題與您的代碼。

首先,當您撥打$.ajax()時,它會嘗試將響應解析爲JSON或HTML。要防止它,請使用dataType: "text"

$.ajax({ 
    type: "POST", 
    url: "111212.py", 
    data: { param: " "}, 
    dataType: "text" 
    }).done(function(o) { 
     alert("OK"); 
}); 

其次,從javascript獲取本地文件可能會違反相同來源策略,具體取決於瀏覽器。請參閱:Origin null is not allowed by Access-Control-Allow-Origin

最重要的一點是,讀取不執行文件,它只是讀取它並返回字符串。

1

顯然,正如已經指出的那樣,這是不可能完成的,不是這樣的。因此,我將開始一個簡單的CGI python服務器來服務HTML文件,並執行腳本。我已經測試過它,它效果很棒!

+0

很好,先生 – jgitter