如何在终端内原位刷新多行打印内容,实现加密货币资产动态更新不换行
终端加密货币持仓实时刷新实现方案
要实现终端原位刷新多行内容,我们可以通过ANSI控制码移动光标位置逐行覆盖旧输出,同时增加刷新间隔避免接口请求过于频繁被限流,修改后的完整可运行代码如下:
import requests import time from datetime import datetime import os # 兼容Windows系统终端对ANSI转义码的支持 os.system('') URL = "https://min-api.cryptocompare.com/data/price?fsym={}&tsyms={}" # 缓存上次价格,避免请求失败直接报错退出 last_prices = { "ETH": 0, "DOGE": 0, "ADA": 0, "SOL": 0 } def get_price(coin, currency): try: response = requests.get(URL.format(coin, currency)).json() last_prices[coin] = response[currency] return response[currency] except: return last_prices[coin] first_run = True # 刷新间隔,单位秒,可自行调整 refresh_interval = 2 while True: date_time = datetime.now().strftime("%m/%d/%Y %H:%M:%S") eth_price = get_price("ETH", "USD") eth_equity = eth_price * 2 doge_price = get_price("DOGE", "USD") doge_equity = doge_price * 100 ada_price = get_price("ADA", "USD") ada_equity = ada_price * 20 sol_price = get_price("SOL", "USD") sol_equity = sol_price * 4 total_equity = eth_equity + doge_equity + ada_equity + sol_equity # 非首次运行时,将光标上移6行,覆盖之前的输出 if not first_run: print('\033[6F', end='') # 统一格式化输出,固定宽度+保留2位小数,避免内容残留错位 print(f"ETH | PRICE: ${eth_price:>7.2f} EQUITY: ${eth_equity:>8.2f}\033[K") print(f"DOGE | PRICE: ${doge_price:>7.2f} EQUITY: ${doge_equity:>8.2f}\033[K") print(f"ADA | PRICE: ${ada_price:>7.2f} EQUITY: ${ada_equity:>8.2f}\033[K") print(f"SOL | PRICE: ${sol_price:>7.2f} EQUITY: ${sol_equity:>8.2f}\033[K") print(f" \033[K") print(f"更新时间: {date_time} | 总权益: ${total_equity:>10.2f}\033[K", end='\r') first_run = False time.sleep(refresh_interval)
可根据自身需求调整参数:
- 修改各币种权益计算的乘数即可匹配你的实际持仓量
- 修改
refresh_interval参数可调整刷新频率,不建议设置低于1秒避免触发接口限流 - 格式化输出的小数位数、对齐宽度都可以按需调整
内容的提问来源于stack exchange,提问作者Paul Bush
相关产品推荐
相关产品推荐

