【问题标题】:Python print faster on Windows 10Python 在 Windows 10 上打印速度更快
【发布时间】:2018-12-06 20:58:17
【问题描述】:

我正在开发一个需要非常快速地打印到控制台的程序。

现在我只是这样打印

print("X", end="")

但是,windows 命令行似乎很慢。有没有办法加快速度?或者您能否推荐一个支持 ANSI、不同字体大小并且可以按我需要的速度打印的不同命令行(约 4056 行,每行每秒最多 317 个字符)?

谢谢。

【问题讨论】:

  • 为什么要在每个print 上使用flush?在控制台上每秒放置 ~4056 行是什么意思?这将如何使用?
  • @lit 老实说,我不太确定我为什么要冲进去。我需要每秒打印那么多行才能在命令行中播放视频(只是我正在处理的一个奇怪的项目,到目前为止它适用于图像)。
  • 您是否尝试过通过sys.stdout.buffer.write(screen_buffer) 每次调用更新整个屏幕,其中屏幕缓冲区是您就地修改的bytearray
  • @eryksun 我没有,但这听起来很有趣。这究竟是如何工作的?你能举一个例子,说明你如何使用这种方法打印一个完整的垂直但半水平的页面,比如 1s,然后是 2s,然后是 3s?
  • 嘿,我现在实际上是在用 python 制作一个基于 curses 的终端图像查看器来娱乐。结果怎么样?你有什么要分享的吗?不一定是源代码,只是可以从中获得灵感的东西。也很难联系到你,这个评论部分是唯一的方法。

标签: python windows cmd printing


【解决方案1】:

让我们比较两种不同的打印概念(字符与行,参见下面的粗体说明),如以下.bat 脚本所示:

@ECHO OFF
SETLOCAL EnableExtensions
if "%~1"=="" (
    set "_flush= "
) else (
    set "_flush=, flush=True"
)
set "_line=317"
:loop
if not "%time:~-2%"=="00" goto :loop
set "_t0=%time%"
python -c "for num in range(0,4096*%_line%): print('X', end=''%_flush%);"
set "_t1=%time%"
python -c "for num in range(0,4096): print('X'*%_line%, end=''%_flush%);"
set "_t2=%time%"
cls
echo %~f0 %* 
set _

结果表明

  • 一个一个地打印一个字符大约需要 7 秒 (_t1 - _t0)
  • 按预先准备好的行顺序打印相同的数据大约需要半秒 (_t2 - _t1):
D:\bat\SO\53659583.bat
_flush=
_line=317
_t0=23:55:03,00
_t1=23:55:09,96
_t2=23:55:10,47

【讨论】:

  • 谢谢。这是我刚想到要尝试的,我实现了它,它提高了大约 20% 的速度。我怀疑相当多的运行时间实际上可能是由于动态渲染图像,所以我将提前做这件事,看看它是如何从那里开始的。
  • 还尝试通过将由“\n”分隔的每一行添加到一个大字符串中来将每个图像打印为一个,但现在它在每个图像中随机打印几个��。不知道为什么。
  • 只是一个替换字符 (Unicode U+FFFD)。当打开的命令窗口 font 不包含字符时出现。尝试例如Dejavu Sans Mono.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2016-10-10
  • 2017-06-09
  • 1970-01-01
  • 2021-08-14
  • 2013-05-12
相关资源
最近更新 更多