运行python脚本的Django视图

2024-06-16 15:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在视图.py公司名称:

from chat.chatbot1 import main_chatbot

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

在索引.js公司名称:

^{pr2}$

python脚本文件夹位于chatbot-django项目内的聊天应用程序中。在

问题是视图找不到文件,并出现以下错误:

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

Tags: 文件djangopy脚本名称框架视图应用程序
3条回答

您的Django应用程序可能将工作目录作为管理.py文件,所以它希望python脚本位于同一目录中。在

使用脚本的完整路径,或相对于管理.py是。在

所以可能是这样的:

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

或者

^{pr2}$

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

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

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

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

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

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

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

^{pr2}$

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

import subprocess
subprocess.check_call([python_path, script_path]

Replacing Older Functions with the subprocess Module

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

示例if与视图.py在

import .run_python_script 

然后调用你想要的函数。。。 您也可以将完整路径放入操作系统但似乎不太好。。。在

相关问题 更多 >