I would like to overwrite something on a line above in a serial console. Is there a character that allows me to move up?
Most terminals understand ANSI escape codes<\/a> . The relevant codes for this use case:
<\/li>
<\/li><\/ul>Example (Python):
No, not really easily, for that you'd have to use something like the curses library , especially if you want to have more control over cursor placement and do more things programatically.
Here's a link for the Python docs on Programming with Curses , and this short tutorial/example might be of interest too.
I just found this note in the docs in case you are using Windows:
No one has made a Windows port of the curses module. On a Windows platform, try the Console module written by Fredrik Lundh. The Console module provides cursor-addressable text output, plus full support for mouse and keyboard input, and is available from http://effbot.org/zone/console-index.htm .
I believe for C++ there is the NCurses library, the linked page has a section on moving the cursor if you want to poke around with C++. Also there's the NCurses Programming HowTo .
Long time ago I used the curses library with C quite successfully.
Update :
I missed the part about running this on a terminal/serially, for that the ANSI escape sequence, especially for a simple task like yours, will be easiest and I agree with @SvenMarnach solution for this.
for i in range(10):
print("Loading" + "." * i)
doSomeTimeConsumingProcessing()
sys.stdout.write("\033[F") # Cursor up one lin
I may be wrong but :
#include <windows.h>
void gotoxy ( int column, int line )
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(
GetStdHandle( STD_OUTPUT_HANDLE ),
coord
);
}
in windows standard console.
Carriage return can be used to go to the beginning of line, and ANSI code ESC A<\/code> (
"\\033[A"<\/code> ) can bring you up a line.
This works on Linux. It can work on Windows by using the
colorama<\/code> package to enable ANSI codes:
import time
import sys
import colorama
colorama.init()
print("Line 1")
time.sleep(1)
print("Line 2")
time.sleep(1)
print("Line 3 (no eol)", end="")
sys.stdout.flush()
time.sleep(1)
print("\rLine 3 the sequel")
time.sleep(1)
print("\033[ALine 3 the second sequel")
time.sleep(1)
print("\033[A\033[A\033[ALine 1 the sequel")
time.sleep(1)
print() # skip two lines so that lines 2 and 3 don't get overwritten by the next console prompt
print()
A simple way based on @Sven Marnach answer:
print(f'\033[A\rxxx')
\033[A
: Move cursor one line up. \r
: Move the cursor to the beginning of the line. xxx
: The string to be printed. {xxx}
if it is a variable If you have some extra characters from the previous line after your string, overwrite them with white space, depending on the length of the previous line. Below I added 10 white spaces.
print(f'\033[A\rxxx{' '* 10}')
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.