同版本Python下脚本在PyCharm正常运行但控制台挂起
这个问题大概率和控制台输出的缓冲机制或者高频输出导致的终端性能瓶颈有关,毕竟PyCharm的终端和GitBash的终端在输出处理逻辑上差异不小,具体原因和解决办法如下:
可能的原因
标准输出缓冲差异
PyCharm的默认终端通常会设置为行缓冲模式,每执行一次print就立刻把内容输出到屏幕;但GitBash在默认配置下可能使用块缓冲——只有当输出缓冲区被填满后,才会一次性把内容刷到屏幕上。这就会导致你看到输出停在1048345,但实际上脚本还在后台处理剩余记录,只是新的print内容还没被显示出来,看起来像“挂起”了。高频输出拖慢终端
你的脚本每处理一行就打印一次计数,100多万次的控制台输出会给GitBash带来极大的性能压力——终端渲染大量文本的速度远慢于Python处理数据的速度,到后期会出现严重卡顿,甚至让你误以为脚本停止运行了。
解决办法
1. 强制刷新输出缓冲区
修改print语句,加上flush=True参数,强制每次打印都立刻刷新缓冲区,确保计数实时显示:
import csv xtime = [] voltage = [] count = 0 with open('audio2.csv', newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: xtime.append(row[0]) voltage.append(row[1]) print(count, flush=True) count += 1 print('finished reading')
2. 降低输出频率
完全没必要每一行都打印计数,改成每处理N条记录才打印一次(比如每1000条),既能监控进度,又不会拖慢终端:
import csv xtime = [] voltage = [] count = 0 with open('audio2.csv', newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: xtime.append(row[0]) voltage.append(row[1]) count += 1 # 每1000条打印一次进度 if count % 1000 == 0: print(f"Processed {count} records", flush=True) print('finished reading')
这样输出量直接减少到原来的千分之一,GitBash的终端压力会小很多,进度也更清晰。
3. 临时禁用输出测试
如果上述方法还是没效果,可以先把所有中间print注释掉,只保留最后的print('finished reading'),看看脚本能不能正常执行完毕。如果能,就完全可以确定是输出导致的“假挂起”问题。
另外补充一点:你的脚本里count的打印顺序有点小问题——先打印count再自增,所以最后输出的1048345对应的是第1048346条记录,离目标的1048574条还差228条,这也侧面说明脚本可能还在处理,只是没输出而已。
内容的提问来源于stack exchange,提问作者temporary_user_name

