2013-03-30 9 views
7

W Linuksie Podczas stdout do wiersza poleceń, chcę zaktualizować określonej dziedzinie, takich jak wyjścia apt-get:Jak zaktualizować wyjściowy wiersz poleceń?

54% [Waiting for headers] [Waiting for headers]  211 kB/s 3s 

procent, kB/s i sekund zaktualizuje każda sekunda.

Jeśli użyjemy printf, otrzymamy wiele linii, które je wyprowadzą. Próbowałem po printf:

printf("\e[1;1H\e[2J"); 

Ale czyści wszystkie dane wyjściowe.

Moje pytanie brzmi: jak zaktualizować określony obszar i zapewnić stabilność innym?

Odpowiedz

7

Użyj powrotu karetki. Przesunie kursor z powrotem na początek linii, z której możesz nadpisać to, co było w linii. Na przykład:

printf("Hello, world!\rX"); 

będzie widoczny jako:

Xello, world! 

Upewnij się równo stdout często, jeśli ma to być widoczne:

fflush(stdout); 
+0

Możesz dodać '\ 027 [k' po' \ r', aby wyczyścić wiersz. Zakłada to sekwencje specjalne końca ANSI, które obsługuje większość terminali. – lhf

3

Dodatkowo (z pożytecznym \r & fflushadvice powyżej), jeśli chcesz mieć pełnoekranowe wyjście konsoli, rozważ użycie opcji ncurses. Jeśli chcesz edytowalną linię wejściową, biblioteka GNU readline również jest przydatna!

Powiązane problemy