Повторная печать нескольких строк в Python - PullRequest
0 голосов
/ 27 апреля 2018

Я работаю над проектом для класса, который вращается вокруг астрономии и положения телескопа с использованием Python 3.6. Мой проект включает в себя печать положения телескопа на консоли и многократное обновление. Я хочу, чтобы информация выводилась на консоль и перезаписывалась каждый раз, чтобы держать пользователя в курсе его текущей позиции. До сих пор я реализовал распечатку местного времени и UTC:

import time
from datetime import datetime
from numpy import array
import sys

#Initial conditions
longitude= 83.6123 #W
latitude= 41.6624 #N
tstep=1/24 #timestep between time calculations
zero_angle=latitude #when telescope is directly up, the angle between telescope and horizon is the latitude.


while stop!=1:
    utc_time,loc_time=datetime.utcnow(),time.ctime()
    print('UTC       :',utc_time,'Local time:',loc_time,flush=True,end='\r')
    #print('Coordinates: ', latitude, ' N',longitude, ' W')
    time.sleep(tstep)

Некоторые вещи вверху предназначены для дальнейшего использования и пока не актуальны. Этот код в настоящее время распечатывает:

UTC       : 2018-04-27 20:41:41.981367 Local time: Fri Apr 27 16:41:41 2018

и обновления, которые выводятся каждые 1/24 секунды. Я хотел бы, чтобы это происходило с несколькими строками (поэтому несколько строк обновляются с каждым шагом и перезаписываются). Flush = True и end = '\ r' я обнаружил в других потоках, но применение этого к отдельному оператору печати перезаписывает первую строку. Есть ли способ иметь несколько независимых строк, которые обновляются каждый раз? Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

похоже, что я нашел решение!

Если вы импортируете «clear_output» из IPython.display, вы можете разрешить консоли обновляться после каждой итерации с обновленной информацией. Полученный код:

while im_still_presenting==True:
    utc_time,loc_time=datetime.utcnow(),time.ctime()
    print('UTC        :',utc_time,'Julian Day:',JD(utc_time),flush=True)
    print('Local time :',loc_time,flush=True)
    print('Coordinates: ', latitude, ' N',longitude, ' E',flush=True)

    time.sleep(tstep)
    clear_output(wait=True)

выведет это на консоль:

UTC        : 2018-04-29 15:17:30.667045 Julian Day: 2458237.5
Local time : Sun Apr 29 11:17:30 2018
Coordinates:  41.6624  N -83.6123  E

и обновлять поля UTC и местное время каждый раз. Всем спасибо за помощь:)

0 голосов
/ 28 апреля 2018

Посмотрите на модуль curses. Это интерфейс к классической библиотеке curses для перемещения курсора на терминале.

...