首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   css3 · 70 天前 · 1341 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    • 用 python 把 bat 或 shell 脚本调用时输出的内容全部写一个 txt 里边
    • 然后再读文件,读取了展示到前端 页面中来,

    问题是:

    • 但调用 bat 或 shell 脚本的时间过长,页面一直在处于空闲等待中,
    • 而且效率也太低了,请教下各位大佬,如何将调用脚本的输出,实时输出到页面上?
    • 调用脚本用的 os.system("test.bat"),交互模式下,持续有内容输出的
    第 1 条附言  ·  67 天前
    非常感谢各位的热心帮忙,因为水平比较菜,我会一 一看一下各位的回复,看哪个我可以实现,就使用哪个😂😂😂
    在此,感谢各位👍
    第 2 条附言  ·  66 天前

    😭😭😭😭

    各位大佬,非常尴尬的是,我还没有解决我的问题,可能是我之前没说清楚:

    • 我用python运行脚本,最终都会运行结束,脚本不是一个一直存活的进程,而且任务会结束的。是不是不太适用websocket?
    • 当前的问题是,执行脚本是,进程始终会被阻塞住,脚本后面的代码要等脚本执行结束才能开始执行,是不是当务之急是应该是异步处理?
    17 回复  |  直到 2018-11-22 09:51:09 +08:00
        1
    chenstack   70 天前
    目测 subprocess.Popen 比较适合
        2
    zk8802   70 天前 via iPhone
    - 后台开个新线程跑 subprocess.Popen(),用异步模式,然后不断把输出写入到一个临时文件中。
    - 前台用 Ajax,或者糙一点儿,用 meta 标签的定时刷新,每隔 N 读出那个临时文件的内容。
        3
    ucun   70 天前   ♥ 1
    用关键字 python webshell 搜,有你想要的
        4
    gimp   70 天前
    也许这个能对你有一点点帮助

    https://github.com/sincerefly/online-ping-demo
        5
    Faiz555   70 天前
    做过类似的,我的解决办法是前端写 JS 调用后台接口后刷新页面.
        6
    tumbzzc   70 天前 via Android
        7
    LengthMin   70 天前 via Android
    之前弄了一个超简单的。。。
    在 csdn 上找到的
    声明一个全局 n
    处理数据的函数每完成一项就把 n 加上某个数

    js 设置定时器,每五秒向另一个 url 请求数据,url 对应的 views 就返回 n 的值
        8
    xpresslink   70 天前
    有个方案是用 Django 的 Channels (本质上是实现 websocket )实现信息的实时刷新
    但是以你这个水平还是不建议自己搞。
    直接 fork 下面这个开源项目吧
    https://github.com/jumpserver/jumpserver
        9
    xpresslink   70 天前
    你就把
    配备了业界领先的 Web Terminal 解决方案
    这部分复制了就行了
        10
    changjiangzzZ   69 天前
    同上,用 channels,本质上是 websocket。django 不断把 bat,shell 脚本输出的内容输送到 channel 里面,浏览器就可以实时读取了
        11
    changjiangzzZ   69 天前
    目测你遇到的问题是请求被后台长时间运行的进程给 block 了,所以也可以使用异步队列( celery )。然后前端使用 ajax 轮询
        12
    petelin   69 天前
    有一个很简单的方法, 用 websocket, js 有可库可以一条命令把一个文件变成 ws 流, 这样就是实现了在前端展示文本变化的功能.
        13
    PureWhiteWu   69 天前
    没用过 djano,只用过 Django。。。。
        14
    c9106   69 天前
    参考下:
    subprocess.Popen(commandline, shell=True, stdout=subprocess.PIPE, cwd=workingPath).stdout.read()
        15
    kazeninaru   69 天前
        16
    css3   66 天前
    😭😭😭😭😭😭😭😭😭😭
        17
    keven2000   57 天前
    既然用 Django 了,用 Channels 就能很好解决了,h5 端用 ws 监听就可以了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3601 人在线   最高记录 4236   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 07:18 · PVG 15:18 · LAX 23:18 · JFK 02:18
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1