我看了一下,但我似乎无法解决这个问题.我想在我的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调用的情况下执行并执行自己的操作.

一、 subprocess 模块简介 subprocess 最早是在2.4版本 引入的。 subprocess 模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值。 它用来代替多个旧模块和函数: os.system os.spawn* os. popen * popen 2.* commands.* 关于这个模 django \core\management\commands\runserver.py 先绑定一些参数最后, 执行 实例的run方法,user_reloader可以在启动命令时添加,让代码修改服务不重启。 aotureload模块负责控制线程的启动与重启任务 进入到main 运行 python _reloader函数, 若环境变量没有设置(正常情况下不会设置),进入到restart_w 本来收集整理网络上相关资料后整理: 从 python 2.4版本开始,可以用 subprocess 这个模块来产生子进程,并连接到子进程的标准输入/输出/错误 去,还可以得到子进程的返回值。 subprocess 意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os. popen * popen 2.* commands.* 一、 subprocess ... 论 Python 与Lua交互有多种,但很多仅凭纯Script操作不是很爽,有个网页UI操作着会方便些。 使用 Python Django 搭个Bin-Json消息转换网站,App/Cloud/Device三方通过网站对消息数据 执行 lua解析转换,检查各方数据是否有误。 Webshell “web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为通过网站端口对网站服务器的某种程度上操作的权限。 一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页 脚本 、上传下载文件、查看数据库、 执行 任意程序命令等。 另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页 脚本 常称为WEB 脚本 木马,比较流行的asp或php木马,也有基于.NET的 脚本 木马与JSP脚 [Java framework] Error in function createSettingsDocument (elements.cxx). javaldx failed! Warning: failed to read path from javaldx Command 's... 之前业务 需要根据前端的提交,用 django 在后端 跑某个 脚本 进行 执行 ,因为 执行 时间较久,所以用的是异步,不知道什么是异步的可以先去研究 django 的异步 执行 框架celery,这里直接展示我的异步环境下 执行 Python 脚本 的代码: tasks.py 的操作: import subprocess # 这个库是能够直接运行 脚本 的关键 @task(bind=True) def run_script(... 我想要实现的目标:我想创建一个 python 脚本 来从CLI 停用数据库 Django 用户.我想出了这个:$sudo python manage.py shell>>> user = User.objects.get(username=FooBar)>>> user.is_active = False>>> user.save()>>... def run(* popen args, input=None, capture_output=False, timeout=None, check=False, **kwargs): """Run command with arguments and return a CompletedProcess instance. The return... subprocess .run(args[, stdout, stderr, shell ...]): 执行 args命令,返回值为CompletedProcess类; 若未指定stdout,则命令 执行 后的结果输出到屏幕上,函数返回值CompletedPro 文章目录0. 简介1. run()1.1 参数以列表形式传递1.2 获取输出结果和返回值1.3 当 执行 出错时抛出异常1.4 输入重定向2. Popen 0. 简介 subprocess 模块允许你创建新的进程,并连接到input/output/error通道,以及获取返回值。 1. run() run()方法封装了一些常用需求,run()是同步的,以下给出一些例子: 1.1 参数以列表形式传递 1.2 获取输出结果和返回值 1.3 当 执行 出错时抛出异常 检查命令返回值是否为0,如果非0则抛出异常。 subprocess – 创建附加进程 subprocess 模块提供了一种一致的方法来创建和处理附加进程,与标准库 的其它模块相比,提供了一个更高级的接口。用于替换如下模块: os.system() , os.spawnv() , os和 popen 2模块 popen ()函数,以及 commands().1. 运行外部命令 subprocess .call(command)     希望通过 django 启动一个在后台一直运行的程序.无论是通过 使用 多线程(threading),还是多进程( subprocess , multiprocessing, os.fork),页面都会返回内容,但一直处于继续等待的界面.分析原因是在 django 启动线程后除非kill掉启动的线程或者线程自己结束,否则 django 都会认为还有消息要返回.        于是考虑建立一个daemon,在 django 启动后与其交互.但如此daemon和 django 要分开启动比较麻烦.决定让daemon在 django