2011-03-02 126 views
5

Tengo un script Python que envía salida a una ventana de comandos de DOS (estoy usando Windows 7) usando la función print(), pero me gustaría evitar (u ocultar) que el cursor parpadee en la siguiente posición de salida disponible. ¿Alguien tiene alguna idea de cómo puedo hacer esto? He mirado una lista de comandos DOS pero no encuentro nada adecuado.¿Cómo desactivar el cursor parpadeante en la ventana de comandos?

Cualquier ayuda sería apreciada. Alan

+0

Por lo que puedo determinar, no puede hacer esto usando la ventana de comando de DOS estándar. Deberá proporcionar su propia ventana de salida, p. usando TKInter o wxPython. – kindall

Respuesta

3

Por lo que se puede decir, no hay un puerto de Windows para el módulo de curses, que es lo más probable es lo que necesita. Lo que más se acerca a sus necesidades es el Console module escrito por Fredrik Lundh en effbot.org. Desafortunadamente, el módulo está disponible solo para versiones anteriores a Python 3, que es lo que parece que está usando.

En Python 2.6/WinXP, el siguiente código abre una ventana de consola, hace que el cursor sea invisible, imprime '¡Hola, mundo!' y luego se cierra la ventana de la consola después de dos segundos:

import Console 
import time 

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

gracias por la respuesta. Tienes razón, estoy usando Python 3.1, por lo que parece que estoy atascado con el cursor por un tiempo todavía :-(Saludos. –

9

he estado escribiendo una biblioteca de colores multiplataforma para utilizar en conjunción con Colorama (http://pypi.python.org/pypi/colorama) para Python 3. Para ocultar totalmente el cursor en windows o 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() 

lo anterior es una copia selectiva pasta &. Desde aquí, deberías poder hacer lo que quieras. Asumiendo que no estropeé la copia y pega esto fue probado en Windows Vista y Linux/Konsole.

Cuestiones relacionadas