那种动态刷新的命令行是怎么实现的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nazor
V2EX    问与答

那种动态刷新的命令行是怎么实现的?

  •  
  •   nazor 2017-09-02 19:37:40 +08:00 4281 次点击
    这是一个创建于 3030 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有的程序运行时需要实时显示当前的状态,用 print 类的函数会导致整个窗口全是字符,不够清楚简洁。
    简单来说就是类似于 top 命令,能够动态刷新窗口内容,同时不会残留以前的字符的效果是怎么实现的?
    第 1 条附言    2017-09-02 20:37:02 +08:00
    好吧,又去了解了一下,发现其实不说 flush 的问题,是 \r 的作用。
    不过 \r 只能让光标回到行首,并不会清空整行内容。因此,若后输出的内容长度小于先前输出的内容,那么还是会有先前内容的残余,网上说再用 /b 清楚,但是我发现这个 \b 字符在 windows 和 linux 环境下是不同的。
    同时,这个有个很大的缺陷:
    多行同时更新是无法实现的……估计得靠 command gui 之类的库了。
    这里面的学问很多,真的能玩出花来。
    第 2 条附言    2017-09-02 20:43:31 +08:00
    刚刚打的错别字有点多,又了解了一下,这门“学问”叫:TUI (指文本用户界面)。
    6 条回复    2017-09-03 07:57:33 +08:00
    jessynt
        1
    jessynt  
       2017-09-02 19:50:01 +08:00   1
    Just flush it.
    nazor
        2
    nazor  
    OP
       2017-09-02 19:56:39 +08:00
    @jessynt 谢谢!感谢指明了搜索关键词,哈哈。
    flush stdout 即可实现。
    geelaw
        3
    geelaw  
       2017-09-02 20:35:36 +08:00 via iPhone   1
    输出退格可以回到本行之前的位置
    ysc3839
        4
    ysc3839  
       2017-09-02 20:45:17 +08:00 via Android
    我没具体了解过,不过可以用 ASCII 控制字符定位光标,输出就覆盖掉了。不过 Windows 内置控制台直到
    Win10 才开始支持这种,之前要用 Windows 的控制台 API 来定位。
    tkpc
        5
    tkpc  
       2017-09-02 21:59:54 +08:00
    printf("%-80s","abcd")
    msg7086
        6
    msg7086  
       2017-09-03 07:57:33 +08:00   1
    curses library 么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2667 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:47 PVG 19:47 LAX 03:47 JFK 06:47
    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