Как отключить мигающий курсор в окне команды?

У меня есть скрипт Python, который отправляет вывод в командное окно DOS (я использую Windows 7) с помощью функции print (), но я хотел бы предотвратить (или скрыть) мигание курсора в следующей доступной выходной позиции. Кто-нибудь знает, как я могу это сделать? Я просмотрел список команд DOS, но я не могу найти ничего подходящего.

любая помощь будет оценили. Алан!--1-->

2 ответов


насколько можно судить, для модуля curses нет порта Windows, что, скорее всего, вам нужно. То, что ближе всего подходит для удовлетворения ваших потребностей, - это модуль консоль написал Фредрик Lundhбыл в effbot.org. К сожалению, модуль доступен только для версий на Python 3, что вы используете.

в Python 2.6/WinXP следующий код открывает окно консоли, делает курсор невидимым, печатает " Hello, world!' и затем закрывает окно консоли через две секунды:

import Console
import time

c = Console.getconsole()
c.cursor(0)
print 'Hello, world!'
time.sleep(2)

я писал кросс-платформенную цветовую библиотеку для использования в сочетании с Colorama (http://pypi.python.org/pypi/colorama) для Python 3. Чтобы полностью скрыть курсор на 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("3[?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("3[?25h")
        sys.stdout.flush()

выше-выборочная копия и вставка. Отсюда ты сможешь делать все, что захочешь. Предполагая, что я не испортил копию и вставил, это было протестировано под Windows Vista и Linux / Konsole.