Django查看运行python脚本

时间:2016-12-06 21:00:21

标签: javascript python ajax django

我在Django框架中有chatbot Web应用程序。到目前为止一切正常,但是现在,我想使用ajax运行chatbot python脚本并从Javascript文件中调用它的视图。我有一个使用REST的API和python脚本的视图以及调用该视图的ajax。

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脚本文件夹位于chatbot django项目内的聊天应用程序中。

问题是该视图无法找到该文件,并显示此错误:

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

3 个答案:

答案 0 :(得分:2)

如果在同一文件夹中,则应导入它:

示例if是与view.py

相同的文件夹
import .run_python_script 

然后只需调用你想要的功能...... 你也可以把完整的路径放在os.system中,但看起来不行......

答案 1 :(得分:0)

你的Django应用程序可能会将工作目录作为manage.py文件的位置,因此它会将python脚本放在同一目录中。

使用脚本的完整路径,或相对于mange.py所在目录的路径。

所以可能是这样的:

there

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

(建议导入脚本的答案可能是更好的方法,除非特别需要将其作为单独的进程运行)。

答案 2 :(得分:0)

你应该给出main_chatbot.py的完整路径。

最好的方法是使用pkg_resources.resource_filename,如下所示:

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

其中 chat 是包含您脚本的包的名称。

要运行脚本,最好使用与Project的可执行文件相同的Python可执行文件(您的virtualenv)。

这样做,您可以使用sys.executable来获取virtualenv使用的Python路径:

import sys
python_path = sys.executable

最佳做法是将os.system替换为subprocess.check_call,如下所示:

import subprocess
subprocess.check_call([python_path, script_path]

请参阅Replacing Older Functions with the subprocess Module