在Linux中,可以使用ncurses库来实现一个进度条小程序。ncurses库是一个用于终端显示的开源库,它提供了一组函数来控制终端的输出和输入。
下面我们将实现一个简单的进度条小程序。
- 准备工作
首先需要安装ncurses库。在Debian/Ubuntu系统下,可以使用以下命令安装:
$ sudo apt-get install libncurses5-dev libncursesw5-dev
- 编写程序
接下来,我们将编写一个使用ncurses库实现进度条的程序。程序实现基本思路如下:
- 使用initscr函数初始化终端
- 使用cbreak函数开启行缓冲模式
- 使用noecho函数关闭回显模式
- 使用start_color函数初始化颜色
- 使用init_pair函数设置颜色对
- 使用attron函数开启属性
- 使用mvprintw函数在屏幕上输出进度条
- 使用refresh函数刷新屏幕
- 使用getch函数等待用户按下任意键结束程序
- 使用endwin函数关闭终端
下面是程序的代码实现:
#include <ncurses.h>
#include <unistd.h>
int main()
{
// 初始化终端
initscr();
// 开启行缓冲模式
cbreak();
// 关闭回显模式
noecho();
// 初始化颜色
start_color();
// 设置颜色对
init_pair(1, COLOR_GREEN, COLOR_BLACK);
init_pair(2, COLOR_RED, COLOR_BLACK);
// 开启属性
attron(COLOR_PAIR(1));
// 输出进度条
for (int i = 0; i <= 100; i++)
{
move(10, 0);
printw("[");
for (int j = 0; j <= i / 2; j++)
{
if (i >= 60)
attron(COLOR_PAIR(2));
printw("=");
}
attron(COLOR_PAIR(1));
for (int k = i / 2 + 1; k <= 50; k++)
printw(" ");
printw("] %d%%", i);
refresh();
usleep(10000);
}
// 等待用户按下任意键结束程序
getch();
// 关闭终端
endwin();
return 0;
}
- 编译运行程序
将程序保存为progressbar.cpp,并使用以下命令编译:
$ g++ -o progressbar progressbar.cpp -lncurses
编译成功后,使用以下命令运行程序:
$ ./progressbar
运行程序后,可以看到一个进度条在屏幕上不停地闪动,直到用户按下任意键结束程序。
完整代码:
import time
import sys
def progress_bar(progress, total, symbol='█'):
percent = progress / total
progress_str = symbol * int(50 * percent)
percent_str = '{:.0%}'.format(percent)
sys.stdout.write('\r[%-50s] %s' % (progress_str, percent_str))
sys.stdout.flush()
if __name__ == '__main__':
total = 100
for i in range(1, total + 1):
progress_bar(i, total)
time.sleep(0.1)
print('\nDone!')