Najnowsze aktualizacje systemu Windows 10 obejmują support for ANSI escape sequences w pliku conhost.exe.Jak korzystać z nowej obsługi sekwencji kontrolnych ANSI w konsoli systemu Windows 10?
byłem w stanie potwierdzić, że sekwencje są poprawnie odebrać w cmd.exe, więc mam niezbędnych aktualizacji. W szczególności próbowałem pisać w prompt $e[?25l
, który ukrywa kursor, a następnie prompt $e[?25h
, który ponownie pokazuje kursor.
Jeśli jednak zacznę interpreter Pythona, a następnie wykonaj następujące czynności:
>>> import sys
>>> sys.stdout.write("\033[?25l")
dobrze, kursor nie jest ukryte. Jak mogę ustawić wszystko we właściwy sposób, aby konsola mogła uzyskać sekwencje specjalne z Pythona?
Cześć Ross - dzięki za to naprawdę miły odpowiedź :) Wydaje się wiele rzeczy związanych z konsoli zrobić, i zastanawiam się - czy też, jak osiągnąć wejściowych bez blokowania w konsoli systemu Windows , podobnie jak można to zrobić w Linuksie, używając flagi O_NONBLOCK? Python Prompt Toolkit uzyskuje dane bez blokowania za pomocą specjalnej funkcji odczytu ujawnionej przez interfejs API systemu Windows: https://github.com/jonathanslenders/python-prompt-toolkit/blob/master/prompt_toolkit/terminal/win32_input.py#L99 - - nie wydaje mi się, że flaga może ustawić, co pozwoliłoby, aby 'sys.stdin.read()' nie blokowało? – user89
@ user89 Nie, niestety nie ma odpowiednika flagi O_NONBLOCK. System Windows używa innego modelu, w tym oczekiwania na zdarzenia na uchwytach i nakładających się operacjach wejścia/wyjścia (ta ostatnia nie jest obsługiwana w przypadku uchwytów konsoli). Musisz albo zagłębić się w Windows API poprzez cpy, albo pozwolić, żeby coś takiego jak curses sobie z tym poradziło. Wsparcie dla Curses nie jest dostarczane z Pythonem dla Windows, ale możesz pobrać port osobno, zobacz: https://docs.python.org/3.3/howto/curses.html –
To ma sens - myślę, że poczekam aby zobaczyć, jak poprawia się konsola Windows (szczególnie w nadchodzącym wydaniu bash w systemie Windows), i na razie trzymaj się maszyn wirtualnych z Linuksem, aby uruchamiać + tworzyć aplikacje konsolowe. – user89