在django视图中使用subprocess.Popen()执行python脚本

在django视图中使用subprocess.Popen()执行python脚本,第1张

概述我看了一下,但我似乎无法解决这个问题.我想在我的django应用程序的视图执行python脚本.我已经在django管理命令中放置了我想要执行的代码,因此可以通过命令行python manage.py命令名来访问它.然后我尝试使用subprocess.Popen(“python manage.py command-name”,shell = True)运行

我看了一下,但我似乎无法解决这个问题.我想在我的django应用程序的视图中执行python脚本.我已经在django管理命令中放置了我想要执行的代码,因此可以通过命令行python manage.py命令名来访问它.然后我尝试使用subprocess.Popen(“python manage.py command-name”,shell = True)运行此命令.

但是,此命令可能需要一些时间才能执行,因此我希望视图继续并允许脚本在后台执行.单独使用subprocess.Popen似乎会导致视图挂起,直到脚本完成,所以我尝试使用一个线程(遵循another SA问题):

class Subprocessthread(threading.Thread):def __init__(self,c):    self.command = c    self.stdout = None    self.stderr = None    threading.Thread.__init__(self)def run(self):    p = subprocess.Popen(self.command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)    self.stdout,self.stderr = p.communicate()

然后执行它:

t = Subprocessthread("python manage.py command-name")t.setDaemon(True)t.start()t.join()

但是,视图仍然挂起:光标有一个忙符号,页面上的AJAX没有加载.否则,在线程调用看起来正常完成(脚本完成之前)后,页面的HTML似乎加载正常并且视图中的命令.有人可以帮帮我吗?我希望脚本能够在不阻止页面上的视图或AJAX调用的情况下执行并执行自己的 *** 作.最佳答案也许你应该使用celery

Celery is a task queue/job queue based
on distributed message passing. It is
focused on real-time operation

总结

以上是内存溢出为你收集整理的在django视图中使用subprocess.Popen()执行python脚本全部内容,希望文章能够帮你解决在django视图中使用subprocess.Popen()执行python脚本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存