V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nazor
V2EX  ›  问与答

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

  •  
  •   nazor · 2017-09-02 19:37:40 +08:00 · 3853 次点击
    这是一个创建于 2672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有的程序运行时需要实时显示当前的状态,用 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   ·   实用小工具   ·   4193 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:09 · PVG 12:09 · LAX 20:09 · JFK 23:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.