我看了一下,但我似乎无法解决这个问题.我想在我的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