编程小白对屏幕上打印 提问
-
- 帖子: 13
- 注册时间: 2019-07-22 2:06
- 系统: ubuntu 18.04
编程小白对屏幕上打印 提问
我在写一些小程序,使用printf打印检测某个传感器(譬如GPIO)的值,但我只能实现printf("\n")这样打印,我想着如何想在终端屏幕的固定位置显示我想打印的值,并且可变,类似与htop那种显示CPU的数字百分比。我应该学习哪方面的知识?
- lilydjwg
- 论坛版主
- 帖子: 4250
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 编程小白对屏幕上打印 提问
终端编程、ncurses 库、ANSI 转义序列、Python 的 urwid 库也挺好的。
- astolia
- 论坛版主
- 帖子: 6513
- 注册时间: 2008-09-18 13:11
Re: 编程小白对屏幕上打印 提问
单纯显示的话,纯shell也可以。用tput cols和tput lines获取终端大小(bash可以直接用COLUMNS和LINES),然后通过换行、空格等在指定位置输出文本
随手写了段在终端中央计数的脚本
随手写了段在终端中央计数的脚本
代码: 全选
#!/bin/bash
PS1=""
N=0
tput civis
while true; do
N=$((N + 1))
tput clear
#COLUMNS=$(tput cols)
#LINES=$(tput lines)
LINE=$(( LINES / 2 ))
for (( i=0; i < LINE; i++ )); do
echo
done
LEN=$(echo -n $N | wc -m)
POS=$(( ( COLUMNS - LEN ) / 2 ))
for (( j=0; j < POS; j++ )); do
echo -n " "
done
echo $N
sleep 0.1
done
- lilydjwg
- 论坛版主
- 帖子: 4250
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 编程小白对屏幕上打印 提问
你这每次 reset 然后用换行和空格抵达目标位置也太……想起 MS Word 缩进、右对齐用空格的人。
不如这样:
不如这样:
代码: 全选
#!/bin/bash -e
tput smcup civis
trap 'tput rmcup cnorm; exit' TERM INT
i=0
while true; do
printf "\e[%d;%df%4d\e[K" $(( LINES / 2 )) $(( COLUMNS / 2 - 2 )) $(( i++ ))
sleep 0.1
done
- astolia
- 论坛版主
- 帖子: 6513
- 注册时间: 2008-09-18 13:11
Re: 编程小白对屏幕上打印 提问
随手写啊,有去查转义序列的时间,循环早写完了
- lilydjwg
- 论坛版主
- 帖子: 4250
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 编程小白对屏幕上打印 提问
不要教坏新人啊。另外这种文档不放在手边么?
- astolia
- 论坛版主
- 帖子: 6513
- 注册时间: 2008-09-18 13:11
- k9288k
- 帖子: 792
- 注册时间: 2012-02-21 22:27
- 系统: Ubuntu12.04