Zawsze się zastanawiałem, jak ludzie aktualizują poprzednią linię w linii poleceń. świetnym tego przykładem jest użycie polecenia wget w systemie Linux. Tworzy pasek ładowania ASCII, który wygląda następująco:
[======>] 37%
i oczywiście pasek ładowania przesuwa się i zmienia się procent, ale nie tworzy nowej linii. Nie wiem, jak to zrobić. Czy ktoś może wskazać mi właściwy kierunek?
command-line
The.Anti.9
źródło
źródło
Jednym ze sposobów jest wielokrotne aktualizowanie wiersza tekstu o bieżące postępy. Na przykład:
Zauważ, że użyłem
sys.stdout.write
zamiastprint
(to jest Python), ponieważprint
automatycznie drukuje "\ r \ n" (nowa linia powrotu karetki) na końcu każdej linii. Chcę tylko powrotu karetki, który przywraca kursor na początek wiersza. Jest równieżflush()
konieczne, ponieważ domyślniesys.stdout
opróżnia swoje wyjście tylko po nowej linii (lub po zapełnieniu bufora).źródło
Sekret polega na wypisaniu tylko \ r zamiast \ n lub \ r \ n na końcu wiersza.
\ r nazywa się powrotem karetki i przenosi kursor na początek wiersza
\ n nazywa się przesuwem o wiersz i przenosi kursor do następnego wiersza w konsoli. Jeśli używasz tylko \ r, nadpiszesz poprzednio napisaną linię. Więc najpierw napisz linię taką jak ta:
następnie dodaj znak dla każdego kleszcza
i tak dalej. Możesz użyć 10 znaków, z których każdy reprezentuje 10%. Ponadto, jeśli chcesz wyświetlić komunikat po zakończeniu, nie zapomnij również dodać wystarczającej liczby białych znaków, aby nadpisać wcześniej zapisane znaki równości w następujący sposób:
źródło
poniżej jest moja odpowiedź, użyj konsoli Windows API (Windows) , kodowanie C.
źródło
bInfo
zdefiniowane?Program PowerShell zawiera polecenie cmdlet Write-Progress, które tworzy w konsoli pasek postępu, który można aktualizować i modyfikować podczas uruchamiania skryptu.
źródło
Oto odpowiedź na twoje pytanie ... (python)
źródło
W następstwie odpowiedzi Grega , oto rozszerzona wersja jego funkcji, która umożliwia wyświetlanie wiadomości wielowierszowych; po prostu podaj listę lub krotkę ciągów, które chcesz wyświetlić / odświeżyć.
Uwaga: przetestowałem to tylko przy użyciu terminala linux, więc Twój przebieg może się różnić w systemach opartych na systemie Windows.
źródło
\n
na\r\n
w twoim skrypcie, ale nadal nie mogłem go uruchomić na Windowsie (prawda?). Ja się←[A←[A
po kilku wiadomościach, Podejrzewam, że'\x1b[A'
kolejność nie robić to, co powinno sięcmd.exe
.Jeśli używasz języka skryptowego, możesz użyć polecenia "tput cup", aby to zrobić ... PS To jest kwestia Linuksa / Uniksa, o ile wiem ...
źródło