I have been trying to change my prompt in sys.ps1 with PYTHONSTARTUP. My idea was that I will show some information on first line (time, path) and the prompt on the second. When I tried changing ps1 to a multiline string the first line would overwrite previous line in the terminal every time I typed a character¹: >>> sys.ps1 = "foo\nbar>" foo foo foo foo foo foo foo bar>testing Then I tried using a class with __repr__ function which will print the first line and return the second, but that resulted in the first line just adding onto the previous one¹: [first line] PY> [first line] PY> t[first line] PY> te[first line] PY> tes[first line] PY> test[first line] PY> testi[first line] PY> testin[first line] PY> testing This is the code that I have so far (if you need it): import sys import datetime import threading import os import ctypes from BlurWindow.blurWindow import GlobalBlur as gb__ gb__(ctypes.windll.user32.GetForegroundWindow(), '#000000CC', True, True) c__ = "\033[38;5;" e__ = "\033[m" sys.ps2 = f"{c__}125m... {e__}" if ctypes.windll.shell32.IsUserAnAdmin() != 0: h = "#" else: h = ">" class ps1__: def __repr__(self): time = datetime.datetime.now().strftime("%H:%M:%S") path = os.path.abspath(os.getcwd()) print(f"{c__}208m{path} {c__}106m{time}{e__}") return f"{c__}125mPY{h} {e__}" sys.ps1 = ps1__() Update: adding an extra line break to the start of the first line made it only repeat, and not add/replace the prev. one¹: [first line] PY> [first line] PY> t [first line] PY> te [first line] PY> tes [first line] PY> test [first line] PY> testi [first line] PY> testin [first line] PY> testing My guess the only thing left is to check if the user executed some command and only then print the first line. ¹ - Note: I did not press enter in that example once Another note: This is all did in the python terminal (or how do you call it, python in cmd) Continue reading...