如何使用Python在不关闭输出的前提下定期更新输出内容
Python实现无关闭实时更新输出内容的方案
首先明确:Python完全支持无需关闭Excel文件、Plotly图表等输出载体,即可实时更新展示数据的需求,针对你提到的行情跟踪场景,分两类场景给出可直接落地的实现方式:
1 实时更新已打开的Excel文件
不需要反复读写本地xlsx文件,直接调用系统接口挂载当前已运行的Excel进程,修改内容后会实时同步到已打开的文件界面,不会出现文件占用冲突。
- Windows环境实现方案:使用
win32com库操作COM接口
import win32com.client import time # 挂载当前已经打开的Excel应用实例 excel_app = win32com.client.GetActiveObject("Excel.Application") # 定位到要更新的工作簿和工作表,注意文件名要和已打开的Excel窗口标题一致 target_sheet = excel_app.Workbooks("行情数据.xlsx").Worksheets("实时行情") # 定时更新循环 while True: # 此处替换为你的爬虫逻辑,获取最新的行情价格 latest_price = round(156.2 + (time.time() % 8), 2) # 直接修改指定单元格的值,Excel界面会立即同步更新 target_sheet.Range("B2").Value = latest_price # 控制更新频率,比如每5秒刷新一次 time.sleep(5)
- Mac环境实现方案:使用
appscript库操作Excel应用,逻辑和上述代码一致。
2 实时更新Plotly图表
不需要关闭图表窗口,可通过两种方式实现数据自动刷新:
2.1 本地网页端展示(适合独立运行的脚本)
使用Plotly官方的Dash框架搭建轻量本地服务,图表在浏览器打开后会按设定的频率自动更新数据:
from dash import Dash, html, dcc, callback, Output, Input import plotly.graph_objects as go import time app = Dash(__name__) # 初始折线图配置 init_fig = go.Figure(go.Scatter(x=[], y=[], mode="lines+markers", name="标的价格")) app.layout = html.Div([ html.H3("实时行情跟踪"), dcc.Graph(id="live-graph", figure=init_fig), # 配置更新间隔,单位为毫秒,此处设置为3秒更新一次 dcc.Interval(id="update-trigger", interval=3*1000, n_intervals=0) ]) # 存储历史数据 time_list = [] price_list = [] @callback( Output("live-graph", "figure"), Input("update-trigger", "n_intervals") ) def update_figure(_): # 替换为爬虫逻辑获取最新数据 current_time = time.strftime("%H:%M:%S") current_price = round(156.2 + (time.time() % 8), 2) time_list.append(current_time) price_list.append(current_price) # 最多保留最近100条数据,避免页面卡顿 if len(time_list) > 100: time_list.pop(0) price_list.pop(0) # 返回更新后的图表 return go.Figure(go.Scatter(x=time_list, y=price_list, mode="lines+markers", name="标的价格")) if __name__ == "__main__": # 运行后浏览器会自动打开图表页面,无需手动刷新 app.run_server(debug=False)
2.2 Jupyter环境展示
直接使用plotly.graph_objects.FigureWidget控件,更新数据后会直接在Notebook内实时刷新,不需要重新渲染图表。
注意事项
爬虫请求证券交易所数据时需遵守对应站点的调用频率限制和用户协议,避免触发反爬规则。
内容的提问来源于stack exchange,提问作者RandallCloud
相关产品推荐
相关产品推荐

