Как динамически обновить вывод терминала на несколько строк в python3? - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь написать программу, которая будет эмулировать жидкокристаллический экран размером 20x4 символа путем динамической печати данных на терминал. В настоящее время я просто пытаюсь заставить вывод на терминал работать, но я не могу понять, как одновременно печатать несколько строк без использования символов новой строки.

import time

i = 0
for i in range(0, 9):
    print(str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i), end='\r')
    print(str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i), end='\r')
    print(str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i) +
          str(i) + str(i) + str(i) + str(i) + str(i), end='\r')

    time.sleep(1)

В настоящее время этот код печатает одну строку 20 символов, которые обновляются правильно, но мне нужны две дополнительные строки под ним. Ожидаемый результат - 4 строки по 20 символов в каждой, которые обновляются динамически. В конце концов, каждая строка будет просто одной строкой для 20 символов.

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Немного поправляя ответ Родреса:

import time

i = 0

goback = "\033[F" * 5  # ? this "climbs you back up 5 lines" at the next
                       # iteration, output at same spot, like `top`


for i in range(0, 9):
    print(f"""{goback}
          {i} {i} {i} {i} {i} 
          {i} {i} {i} {i} {i}
          {i} {i} {i} {i} {i} 
          {i} {i} {i} {i} {i} """)

    time.sleep(1)


см. { ссылка }, откуда я получил странные символы.

0 голосов
/ 18 марта 2020

Этого можно добиться, используя формат строки f и строка документа .

См. Официальную документацию для строк F (форматированные строковые литералы) здесь

Код должен выглядеть следующим образом.

import time

i = 0
for i in range(0, 9):
    print(f"""
          {str(i)} {str(i)} {str(i)} {str(i)} {str(i)} 
          {str(i)} {str(i)} {str(i)} {str(i)} {str(i)}
          {str(i)} {str(i)} {str(i)} {str(i)} {str(i)} 
          {str(i)} {str(i)} {str(i)} {str(i)} {str(i)} """)

    time.sleep(1)

Пожалуйста, дайте мне знать, если это не то, что вы ищете, дайте мне знать, чтобы я мог помочь вам придумайте что-нибудь более подходящее для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...