【问题标题】:Django executing shell script from views and not to wait until the executed script finishesDjango从视图执行shell脚本,而不是等到执行的脚本完成
【发布时间】:2021-09-02 12:14:33
【问题描述】:

目前我正在开发一个 django 项目,我想在其中启动一个 python shell 脚本,以从我在 Django 应用程序中的一个视图中执行一些任务。

我想要实现的是来自我的 Django 应用程序,当我调用视图函数时,它会执行 shell 脚本,但不会等到 shell 脚本完成。因此 Django 应用程序完成了请求,但在后台启动的过程仍在进行中。因此,Django 应用程序在启动进程运行时能够接收新请求。

有什么方法可以做到这一点,或者有什么更好的方法可以从 Django 中启动单独的进程并监控它们的状态?

我尝试了什么:

def example_view(请求): os.system("我的 shell 脚本") "os.system 运行时,代码不会跳到下一条指令"

【问题讨论】:

  • 你试过 django-celery 吗?

标签: django


【解决方案1】:

根据您在问题中提到的内容并假设您使用的是 Django 3.1 或 +

根据我的理解,您想要做的是设置一个异步视图。 异步视图将允许您的应用程序在视图内运行某些代码(在您的情况下为 shell 脚本),这不会妨碍其通常的流程。 重复确切的技术细节会在此答案中造成冗余和模糊,因此我建议您参考offical documentation 了解如何执行此操作。

【讨论】:

  • async def test_socket(request): if request.method == "GET": print("TEST CONNECTION") os.system("my script'") print(os.getpid()) print("Process kicked off") return JsonResponse(list({}), safe=False) 我收到以下错误 AttributeError: 'coroutine' object has no attribute 'get'
  • 我希望你真的想在你的 django 应用程序中执行 SHELL SCRIPT。我没有在回答中提到它,因为它可能超出主题,但是执行命令可能会给您的应用程序和服务器带来安全风险,这可能会花费您大量的美元来恢复。如果您知道自己在做什么并且您的情况确实需要实施脚本,那么请继续您的方法。
  • 和你的 AttributeError: 'coroutine' object has no attribute 'get' 一样,你需要参考我在答案中链接的文档,你要做的是实现一个基于函数查看并使用基于类的 url 语法调用它。我建议您以这种方式阅读文档,它将解决您大量寻找代码的时间。
猜你喜欢
  • 2016-05-23
  • 2012-06-26
  • 1970-01-01
  • 2013-06-13
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多