[Python] Python multiline prompt

Discussão em 'Python' iniciado por Stack, Março 21, 2025.

  1. Stack

    Stack Membro Participativo

    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...

Compartilhe esta Página