我有一个Python脚本,使用print()函数将输出发送到DOS命令窗口(我使用的是Windows 7),但我希望防止(或隐藏)光标在下一个可用输出位置闪烁。有谁知道我怎么能这样做?我看了一下DOS命令列表,但找不到合适的东西。
任何帮助将不胜感激。 艾伦
答案 0 :(得分:13)
我一直在编写一个跨平台颜色库,与Python 3的Colorama(http://pypi.python.org/pypi/colorama)结合使用。完全隐藏光标在windows或linux上:
import sys
import os
if os.name == 'nt':
import msvcrt
import ctypes
class _CursorInfo(ctypes.Structure):
_fields_ = [("size", ctypes.c_int),
("visible", ctypes.c_byte)]
def hide_cursor():
if os.name == 'nt':
ci = _CursorInfo()
handle = ctypes.windll.kernel32.GetStdHandle(-11)
ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci))
ci.visible = False
ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci))
elif os.name == 'posix':
sys.stdout.write("\033[?25l")
sys.stdout.flush()
def show_cursor():
if os.name == 'nt':
ci = _CursorInfo()
handle = ctypes.windll.kernel32.GetStdHandle(-11)
ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci))
ci.visible = True
ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci))
elif os.name == 'posix':
sys.stdout.write("\033[?25h")
sys.stdout.flush()
以上是选择性副本&糊。从这里你几乎可以做你想做的事。假设我没有搞砸副本和粘贴,这是在Windows Vista和Linux / Konsole下测试的。
答案 1 :(得分:3)
据我们所知,curses模块没有Windows端口,这很可能是您需要的。最接近满足您需求的是Fredrik Lundh在effbot.org上撰写的Console module。不幸的是,该模块仅适用于Python 3之前的版本,这是您似乎正在使用的版本。
在Python 2.6 / WinXP中,以下代码打开一个控制台窗口,使光标不可见,打印'Hello,world!'然后在两秒钟后关闭控制台窗口:
import Console
import time
c = Console.getconsole()
c.cursor(0)
print 'Hello, world!'
time.sleep(2)
答案 2 :(得分:3)
对于在2019年看到此内容的任何人,都有一个名为“ cursor”的Python3模块,该模块基本上只是具有hide和show方法。安装光标,然后使用:
import cursor
cursor.hide()
您完成了!