Замените несколько строк в консоли в Python без Curses - PullRequest
0 голосов
/ 23 мая 2018

Итак, у меня есть скрипт, который отправляет запросы на веб-сайт, а затем отображает коды состояния для пакетов ответа.Примерно так:

METHOD | COUNT

  200  | 2 results
  404  | 987 results
  500  | 1 results
  ...

Требуется некоторое время для завершения, поэтому я оставил его запущенным на коробке, в которую я вставил ssh с помощью инструмента Linux Screen.Проблема в том, что screen не работает с модулем Python curses, поскольку для отсоединения от экранного терминала (чтобы я мог выйти из системы и оставить его включенным), требуется, чтобы я нажал ctrl+a+d, который захвачен, а затемигнорируется curses.

Я знаю, что вы можете перезаписать отдельные строки, выводимые на консоль в Python, следующим образом:

    out = "200 | {} results\r".format(num)
    sys.stdout.write(out)
    sys.stdout.flush()

Но есть ли способ расширить это на несколько строк, чтобы я мог сделать что-то более похожее на:

    # Updates approx once a second
    out = ""
    for code, num in STATUS_CODES:
        out += "{} | {}\r\n".format(code, num)

    sys.stdout.write(out)
    sys.stdout.flush()

1 Ответ

0 голосов
/ 04 июня 2018

Ответом для меня было очистить весь экран с помощью:

sys.stdout.write("\x1b[2J\x1b[H")

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

...