15

print() 関数を使用して DOS コマンド ウィンドウ (Windows 7 を使用しています) に出力を送信する Python スクリプトがありますが、次の使用可能な出力位置でカーソルが点滅しないようにしたい (または非表示にしたい)。どうすればこれを行うことができるか考えている人はいますか? DOS コマンドのリストを調べましたが、適切なものが見つかりません。

どんな助けでも大歓迎です。アラン

4

4 に答える 4

27

python3の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()

上記は選択的なコピー&ペーストです。ここから、あなたはほとんどあなたが望むことをすることができるはずです。コピーアンドペーストを台無しにしないと仮定すると、これはWindowsVistaおよびLinux/Konsoleでテストされました。

于 2012-05-04T20:47:01.947 に答える
3

知る限り、curses モジュール用の Windows ポートはありません。これはおそらく必要なものです。ニーズに最も近いものは、effbot.org で Fredrik Lundh によって作成されたConsole モジュールです。残念ながら、このモジュールは Python 3 より前のバージョンでしか利用できません。これはあなたが使用しているようです。

Python 2.6/WinXP では、次のコードはコンソール ウィンドウを開き、カーソルを非表示にし、'Hello, world!' を出力します。2 秒後にコンソール ウィンドウを閉じます。

import Console
import time

c = Console.getconsole()
c.cursor(0)
print 'Hello, world!'
time.sleep(2)
于 2011-03-03T03:01:43.720 に答える