从Django的REST API运行Python脚本

时间:2019-03-25 07:53:20

标签: python django

我有一个脚本文件(.py),该文件需要在POST API请求中运行。这些脚本也没有几个输入参数。

我可以通过链接https://django-extensions.readthedocs.io/en/latest/runscript.html进行操作,现在我可以从外壳程序成功运行脚本了。

python manage.py runscript scriptName --script-args arg1 arg2

但是现在,我想在API中运行带有参数的相同脚本,其中参数将从POST请求中发布。 我发现我可以使用子流程。但这不起作用。

以下是我要运行的代码:

cmd = subprocess.Popen(['scriptName', arg1, arg2], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = cmd.communicate()

执行上述代码后,脚本文件将在浏览器中打开。

注意::我正在执行的脚本包含机器学习代码。

请帮助我,让我知道我在做什么错。我还需要脚本的输出作为响应返回。

1 个答案:

答案 0 :(得分:2)

这是工作代码

DjangoProject / Project / view.py

from rest_framework.generics import ListAPIView
from rest_framework.response import Response
import os

class MyView(ListAPIView):
    def post(self,request):
        message = self.request.POST.get('message','')
        os.system('python cout.py '+message)
        return Response(
            {
                "Status":True
            }
        )

我在django根文件夹下的python脚本

DjangoProject / cout.py

import sys
print("Python : ",sys.argv[1])

通过邮递员,您可以发送带有表单数据“邮件”的邮寄请求 然后您可以在控制台上看到该消息

示例: 在邮递员中

message = hi jasir 

在您的控制台中:

Python : hi jasir