使用 djano 框架,后台用 Python 调用 bat 或 shell 脚本,如何实时把调用输出的内容,展示到前端页面中来?

2018-11-09 10:42:46 +08:00
 css3

我很菜, 我现在能做的就是:

问题是:

4094 次点击
所在节点    Python
17 条回复
chenstack
2018-11-09 10:56:34 +08:00
目测 subprocess.Popen 比较适合
zk8802
2018-11-09 11:04:28 +08:00
- 后台开个新线程跑 subprocess.Popen(),用异步模式,然后不断把输出写入到一个临时文件中。
- 前台用 Ajax,或者糙一点儿,用 meta 标签的定时刷新,每隔 N 读出那个临时文件的内容。
ucun
2018-11-09 11:19:45 +08:00
用关键字 python webshell 搜,有你想要的
gimp
2018-11-09 11:55:36 +08:00
也许这个能对你有一点点帮助

https://github.com/sincerefly/online-ping-demo
Faiz555
2018-11-09 12:00:55 +08:00
做过类似的,我的解决办法是前端写 JS 调用后台接口后刷新页面.
tumbzzc
2018-11-09 12:05:41 +08:00
LengthMin
2018-11-09 13:56:01 +08:00
之前弄了一个超简单的。。。
在 csdn 上找到的
声明一个全局 n
处理数据的函数每完成一项就把 n 加上某个数

js 设置定时器,每五秒向另一个 url 请求数据,url 对应的 views 就返回 n 的值
xpresslink
2018-11-09 14:21:50 +08:00
有个方案是用 Django 的 Channels (本质上是实现 websocket )实现信息的实时刷新
但是以你这个水平还是不建议自己搞。
直接 fork 下面这个开源项目吧
https://github.com/jumpserver/jumpserver
xpresslink
2018-11-09 14:23:31 +08:00
你就把
配备了业界领先的 Web Terminal 解决方案
这部分复制了就行了
changjiangzzZ
2018-11-09 15:33:19 +08:00
同上,用 channels,本质上是 websocket。django 不断把 bat,shell 脚本输出的内容输送到 channel 里面,浏览器就可以实时读取了
changjiangzzZ
2018-11-09 15:38:19 +08:00
目测你遇到的问题是请求被后台长时间运行的进程给 block 了,所以也可以使用异步队列( celery )。然后前端使用 ajax 轮询
petelin
2018-11-09 15:43:36 +08:00
有一个很简单的方法, 用 websocket, js 有可库可以一条命令把一个文件变成 ws 流, 这样就是实现了在前端展示文本变化的功能.
PureWhiteWu
2018-11-09 15:44:29 +08:00
没用过 djano,只用过 Django。。。。
c9106
2018-11-09 16:30:46 +08:00
参考下:
subprocess.Popen(commandline, shell=True, stdout=subprocess.PIPE, cwd=workingPath).stdout.read()
kazeninaru
2018-11-09 17:30:14 +08:00
css3
2018-11-12 20:49:29 +08:00
😭😭😭😭😭😭😭😭😭😭
keven2000
2018-11-22 09:51:09 +08:00
既然用 Django 了,用 Channels 就能很好解决了,h5 端用 ws 监听就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/506024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX