- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 python 程序中,我想在一个很长的循环中打印进度。我想输出特定信息,如完成百分比等...,但我不希望所有这些输出占据整个屏幕。
理想情况下,我想打印一条进度线。有点像
train 53/56...x6 │ loss:1.356 │ miou:0.276 │ rate=3.13 Hz, eta=0:00:01, total=0:00:17, wall=19:48 EST
然后,当打印下一行时,我想简单地覆盖这一行。
目前,我可以通过在打印消息之前简单地打印回车符 '\r'
来做到这一点。这会将光标返回到行的开头,然后覆盖该行。正是我想要的。
问题是,当终端太小而无法容纳整行时,该行会环绕,回车会将我带到环绕行的开头,而不是该行的绝对开头。
有没有办法让光标一直回到正确行的开头?
最佳答案
您可以使用 ANSI escape sequences for cursor movement ,最值得注意的是:
- Position the Cursor:
\033[<L>;<C>H
, or\033[<L>;<C>f
puts the cursor at line L and column C.- Move the cursor up N lines:
\033[<N>A
- Move the cursor down N lines:
\033[<N>B
- Move the cursor forward N columns:
\033[<N>C
- Move the cursor backward N columns:
\033[<N>D
- Save cursor position:
\033[s
- Restore cursor position:
\033[u
光标位置保存/恢复似乎很适合你的情况,但不幸的是,这两个代码不被许多终端仿真器接受。
他们在 xterm
工作和 xfce4-terminal
虽然(除了在终端/滚动输出的最后一行,正如@ThomasDickey 在评论中指出的那样)。尝试:
echo -e "\033[s" {1..100} "\033[u" "Overwrite"
对于其他终端仿真器,您可以使用 \033[<N>A
试试运气。将光标向上移动所需的行数,然后移动到列 0
.
如果您知道行的长度,则可以使用(bash
示例,注意 COLUMNS
环境变量的用法)计算它跨越多少行(如果换行):
line='...'
len=${#line}
rows=$((len / COLUMNS))
然后向上移动:
printf "\033[%dA" "$rows"
在 Python 中,您可以像这样使用它:
print("\033[s", "123"*100, "\033[u", "Overwrite", sep='')
print("\033[%dA" % 3, "Overwrite", sep='')
或者,用 curses
之类的东西抽象所有这些.
基于将光标向上移动 N 行 ANSI 转义序列(应该适用于大多数终端仿真器)和跨 Python 兼容 code for terminal width detection (在 Python3 中,您可以使用 shutil.get_terminal_size
),这是一个概念验证演示,使用滚动输出,适应行长度和改变终端宽度:
#!/usr/bin/env python
from __future__ import print_function
import os
import time
cnt = 0
while True:
with os.popen('stty size', 'r') as stty:
rows, columns = stty.read().split()
line = "Run: {}, Columns: {}, Filler: {}".format(cnt, columns, "***"*100)
print(line)
print("\033[{}A".format(len(line) // int(columns) + 1), end='')
time.sleep(1)
cnt += 1
关于python - 文本环绕时清除终端中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169869/
我正在学习 ada 并且我正在尝试为枚举实现附加重载。 基本上我希望能够向 Day 类型添加一个 Integer 并获得生成的 Day 值。所以星期一 + 2 => 星期三。 这是我的简化代码: pr
Pycharm 具有“包围”代码片段的功能。有一些已经设置好的功能: 我想添加print()(使用python3),我该怎么做? 最佳答案 AFAIU,您可以为此定义自己的“实时”模板。 定义实时模板
例。我有一个包含15个对象的数组。我想从给定的索引开始枚举。假设从索引5开始,然后是上方的索引,下方,上方,下方等的索引...我确实希望它绕起来。 因此,在我的示例中,索引的顺序将是这样。 5、6、4
我需要帮助创建 UIPickerView 来环绕选项。因此,选择器不是这样的: 我希望它看起来像这样(没有“min”): 我到处找,但找不到用 Swift 2.0 实现的方法谢谢! 最佳答案 以下是有
如何让 UITextView 将其文本包裹在 UIImage 周围,如下图所示? 图像大小不一定是事先已知的。 最佳答案 IOS 7 及以上版本: UIBezierPath * imgRect = [
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: UIScrollView. Any thoughts on implementing “infinite” scro
我像这样创建纹理: this->width = width; this->height = height; glGenFramebuffers(1, &framebuffer); glBindFram
在编码和模板化中,我经常需要换行文本的特定部分。是否有任何快捷方式可以包装当前选择,例如: Hello World "Hello World" Hello World {{ trans 'Hello
我正在做一个项目,我们有一些从数据库中填充的 Highcharts 图表;其中之一是散点图,我们需要包围放置在图表外部区域的点。 我们需要像 this 这样的图表但是我们需要散点图外部点周围的区域;使
我有一个 500 像素高和 50 像素宽的 jpg。它由 10 个 50px x 50px 的正方形组成,每个正方形包含一个从 1 到 10 的数字(1 在图像顶部,10 在底部)。 (jpg 在这里
我正在尝试为那些了解它的人创建一个类似 Microsoft Project 的元素控件。 我有一个Container Div,然后有两个子容器如下: 每个子容器都有很多内部 div,例如,我的第一个子
我有 4 个 div,一个我想向左浮动,视频播放器(加载了 jquery),另一个包含一些将向右浮动的帮助/提示文本。这两个应该排在顶部。在视频播放器下方将是一个 div 内的表格。 当有人点击表格中
这个问题在这里已经有了答案: Proper use of flex properties when nesting flex containers (1 个回答) 关闭 4 年前。
我在使用自定义列表图像时遇到问题/其中图标隐藏在列表环绕的 float 元素后面。 http://jsfiddle.net/V8evM/ HTML This is list item n
是否可以将 textview 环绕在 textview 周围,第二个 textview 将环绕到第一个 textview 下的下一行? 例如: 我尝试过使用 android:layout_weig
图片最能说明问题: 它只是一个 float: left 图像 ( http://jsbin.com/itihes/1 )。有什么方法可以防止纯 CSS 中的动态文本出现这个问题吗?我确实希望文本换行,
我在 C 规范中读到一点,无符号变量(特别是 unsigned short int)在整数溢出时执行一些所谓的环绕 ,尽管我在带符号的变量上找不到任何东西,除了我留下了未定义的行为。 我的教授告诉我,
如果您想要容器底部的 div,如何让文本环绕 div? 我可以弄清楚如何让文本环绕在 div 上,只要它在顶部,但如果我尝试将它推到页面底部,文本要么不会'不要继续跨越 div 的顶部,否则 div
假设数组的长度为 1000。我正在尝试创建一种简单的方法来遍历存储在数组中的图像路径而不会越界。当涉及到单击“下一步”按钮以增加数组索引时,下面的方法使用模数很好地处理了环绕,但当我必须减少并从索引中
假设我的光标在单词 word 内.使用 vim-surround,输入序列 ysiw*将替换 word与 *word* . 问题:是否有我可以输入的单个序列来代替生成 **word** (即,单词加粗
我是一名优秀的程序员,十分优秀!