如何把控制台打印的数据显示在页面上 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
mart1nN

如何把控制台打印的数据显示在页面上

  •  
  •   mart1nN 2020 年 6 月 8 日 4650 次点击
    这是一个创建于 2147 天前的主题,其中的信息可能已经有所发展或是发生改变。

    师父们,我的项目前端 vue,后端 python flask 。

    有个功能是点击一个按钮,会调用后端一个算法,执行时间比较长,1-2 分钟左右。期间想把控制台打印的东西显示在页面上。请问有什么插件或者思路吗?

    补充一点就是调用算法的接口被封装过,有一部分是我 print()出来的;另一部分是方法中 print()出来的,这部分不能修改,所以还需要能获取当前控制台输出

    16 条回复    2020-06-09 23:53:25 +08:00
    nightwitch
        1
    nightwitch  
       2020 年 6 月 8 日
    输出重定向。
    mart1nN
        2
    mart1nN  
    OP
       2020 年 6 月 8 日
    @nightwitch 不好意思,可以详细一点吗,我完全没接触过
    liyang5945
        3
    liyang5945  
       2020 年 6 月 8 日   1
    使用 websocket 即可,有数据打印时同时向客户端推送数据
    ohao
        4
    ohao  
       2020 年 6 月 8 日
    这个可以理解为 2 个逻辑吧?

    首先是后端的输出 , 就是把执行结果或者过程,重定向输出到一个日志文件里
    然后后端读取这个日志 提供一个接口 , 前端拉取这个接口的内容打印出来

    你可以看下 whm/cpanel 的 builder (商业软件), 国内 BT 的就是 python 写的 他那个安装过程和结果 就是这样做的

    如果你直接打印的话 可能有前端浏览器缓存 , 后端 WS 的缓存 不能实时输出
    就是 1 2 3 你期望 输出 1 完成然后输出 2 完成在输出 3 但是它会 1 2 3 全部完成了才一起输出
    还有导致一些奇奇怪怪的问题
    CEBBCAT
        5
    CEBBCAT  
       2020 年 6 月 8 日
    建议还是重写目标算法,让它返回字符串。

    我 Python 不熟,我觉得你也没说得很清楚,看起来这个后端算法像是一个别人写到一半的函数,结果不是通过 return 返回的,二是 stdout
    rihkddd
        6
    rihkddd  
       2020 年 6 月 8 日
    看一下这个: http://websocketd.com/ ,websocketd --port=8080 your-program 就开了一个 websocket,前端脸上之后把终端的输出格式化一下展示就行了。
    krapnik
        7
    krapnik  
       2020 年 6 月 8 日
    netnr
        8
    netnr  
       2020 年 6 月 8 日
    前面有做一个视频切片的功能,程序调用 cmd 运行,输出内容显示到页面

    1. 请求视频切片 生成一个缓存 KEY 并返回
    2. CMD 输出的内容添加到数组,该数组 对应 生成的缓存 KEY
    3. 写一个方法根据 缓存 KEY 读取输出的内容数组

    缓存 KEY 可以根据传的参数 生成 MD5 之类的
    rapiz
        9
    rapiz  
       2020 年 6 月 8 日   1
    起个 websocket 然后用 dup2 把 stdout 重定向到 websocket 的 file descriptor
    必须要起子进程运行这个算法然后 dup2,如果在 flask 进程内直接调用会导致 flask 的输出也被重定向,应该是无解的。
    rapiz
        10
    rapiz  
       2020 年 6 月 8 日
    (我是按照 socket 说的,实际上没用过 python 的 websocket,不过大概流程是这样的
    Latin
        11
    Latin  
       2020 年 6 月 8 日
    subprocess 调用算法子进程输出通过 websocket 回调给前端,这样应该没有阻塞问题。
    Vegetable
        12
    Vegetable  
       2020 年 6 月 8 日
    可以使用 stream 的方式返回 stdout,怎么实时显示的问题我还没想过
    https://gist.github.com/luliangce/e587238ed619084cef9ddeeab7d4ece8
    xcstream
        13
    xcstream  
       2020 年 6 月 8 日
    print 绑定 websocket
    Vegetable
        14
    Vegetable  
       2020 年 6 月 8 日
    搞定了
    redbuck
        15
    redbuck  
       2020 年 6 月 8 日
    你是要调试?
    可以用 eruda
    mart1nN
        16
    mart1nN  
    OP
       2020 年 6 月 9 日
    @all 谢谢师父们建言献策,怪我问题描述不清。简单来说是这样:点个按钮,后端调用一个神经网络的模型对一堆数据识别,执行时间比较长,然后前端要把执行过程中控制台打印的东西显示出来比方说:model.summary()打印出来的网络结构啥的。给老师们看到我这个玩意儿在跑。那一个东西打比方我设想的是有点像阿里云官网连接了远程服务器,然后那个黑色部分能显示那样。

    我现在整了一个 txt 文件,然后把输出重定向到了这个文件中,开了一个 websocket 服务,循环读取文件里的信息然后推给前端显示。勉强完成这个功能,希望答辩的时候老师不要问太细。

    这样下来还有一个问题,就是异步启动 websocket 服务,我这里一直报 There is no current event loop in thread 'Thread-XXX'(师父们有空可以看看我最新提的那个问题,代码啥的都贴那儿了)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2722 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 06:05 PVG 14:05 LAX 23:05 JFK 02:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86