2016-12-06 35 views
0

我有chatbot在Django框架中的web應用程序。到目前爲止一切正常,但現在,我想使用ajax運行chatbot python腳本並從Javascript文件中調用視圖。我有一個使用REST的API以及python腳本和ajax的視圖來調用該視圖。Django視圖運行python腳本

view.py:

from chat.chatbot1 import main_chatbot 

def run_python_script(request): 
    os.system('python3 main_chatbot.py') 
    return HttpResponse("OK") 

index.js:

function run_chatbot_script(){ 
    $.ajax({ 
     type: 'GET', 
     url: 'http://127.0.0.1:8000/chatbot/run_python_script/',}); 

和Python腳本文件夾位於聊天機器人Django項目裏面聊天應用。

的問題是,鑑於無法找到該文件,出現此錯誤:如果是同一個文件夾

例子:

python3: can't open file 'main_chatbot.py': [Errno 2] No such file or directory 
+0

使用腳本的完整路徑 - 服務器可能在與腳本不同的文件夾中運行。 – furas

+0

@furas main_chatbot位於聊天應用程序內部名爲chatbot1的文件夾內。寫完整的路徑,它仍然是相同的錯誤視圖無法看到chatbot1文件夾 –

回答

2

如果是在同一文件夾,你應該將其導入在view.py

import .run_python_script 

然後就打電話給你想要的功能...... 你也可以把完整的路徑中使用os.system,但它似乎好了...

+0

main_chatbot是在聊天應用程序內部名爲chatbot1的文件夾內。寫完整的路徑,它仍然是相同的錯誤視圖無法看到chatbot1文件夾 –

0

您的Django應用程序可能會將工作目錄作爲您的manage.py文件的位置,因此它會期望python腳本位於同一目錄中。

使用腳本的完整路徑或相對於mange.py所在目錄的路徑。

所以也許是這樣的:

os.system('python3 chat/main_chatbot.py') 

os.system('python3 /home/user/django_project/chat/main_chatbot.py') 

(答案提示輸入腳本可能是這樣做的更好的辦法,除非有特定的需要來運行它作爲單獨的過程)。

+0

main_chatbot是在聊天應用程序內部名爲chatbot1的文件夾內。寫完整的路徑,它仍然是相同的錯誤視圖無法看到chatbot1文件夾 –

+0

是否設置該文件夾的權限,以便Django可以讀取它? –

+0

不,我不這麼認爲 –

0

您應該給出main_chatbot.py的完整路徑。

要做到這一點,最好的辦法,可以使用pkg_resources.resource_filename,像這樣:

import pkg_resources 
script_path = pkg_resources.resource_filename('chat', 'main_chatbot.py") 

聊天是包含腳本的包的名稱。

要運行該腳本,使用與您的項目可執行文件(您的virtualenv)相同的Python可執行文件可能是一個好主意。

不要做到這一點,你可以用sys.executable讓你的virtualenv使用Python路徑:

import sys 
python_path = sys.executable 

它是由subprocess.check_call更換os.system,像這樣的最佳實踐:

import subprocess 
subprocess.check_call([python_path, script_path] 

請參閱Replacing Older Functions with the subprocess Module

+0

main_chatbot位於聊天應用程序文件夾內名爲chatbot1的文件夾內。寫完整的路徑,它仍然是相同的錯誤視圖無法看到chatbot1文件夾 –

+0

錯誤是subprocess.CalledProcessError:命令'['/用戶/ emansaad /桌面/ chatbot/bin/python3','/用戶/ emansaad /Desktop/chatbot/src/chat/main_chatbot.py']'返回非零退出狀態1 –

+0

我再次嘗試並將「聊天」更改爲「chatbot1」有ImportError:沒有名爲「chatbot1」的模塊 –