Использование rich.progress.Progress для отслеживания загрузки на Google Диск, но прогресс не отображается в терминалеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование rich.progress.Progress для отслеживания загрузки на Google Диск, но прогресс не отображается в терминале

Сообщение Anonymous »

Я пытаюсь заставить это работать уже больше суток. Моя главная проблема в том, что я мало что нашел на fsspec или rich.progress.Progress в сети или здесь, на stackoverflow.com.Я' Я просмотрел каждую строку во время запуска, и каждая строка выполняется должным образом, но не генерирует никакого вывода на консоль.
Следующая часть представляет собой полное предположение о том, почему это не работает.

Код: Выделить всё

rich.progress.Progress
напрямую ссылается на консоль, таким образом он скрывает курсор во время выполнения, и я предполагаю, что rich генерирует на консоль, которая не отображается, потому что fsspec.callbacks.Callback выполняется асинхронно.
Источник:[/b]

Мне пришлось удалить несколько параметров по соображениям конфиденциальности (

Код: Выделить всё

client_id, client_secret
), и оба lpath и rpath должны быть установлены.

Код: Выделить всё

import contextlib

import fsspec.callbacks as callbacks
import rich.progress as progress
import rich.style as style
import pydrive2.fs

class RichCallback(callbacks.Callback):
def __init__(self, *args, **kwargs):
self._progress = progress.Progress(
progress.BarColumn(
bar_width = 100,
style = style.Style(
color = style.Color.from_rgb(
red = 255,
green = 0,
blue = 0
)
),
complete_style = style.Style(
color = style.Color.from_rgb(
red = 0,
green = 255,
blue = 0
)
)
),
"[progress.percentage]",
progress.DownloadColumn(),
progress.TransferSpeedColumn(),
'eta',
progress.TimeRemainingColumn()
)

self._task = None
super(RichCallback, self).__init__(*args, **kwargs)

def call(self, *args, **kwargs):
if self._task is None:
self._task = self._progress.add_task(description = '', total = self.size)
self._progress.update(task_id = self._task, completed = self.value)

def close(self):
if self._progress is not None:
self._progress.stop()

def __del__(self):
return self.close()

if __name__ == '__main__':
with contextlib.suppress(KeyboardInterrupt):
fs = pydrive2.fs.GDriveFileSystem(
'root',
client_id = '',
client_secret = '',
profile = 'phpjunkie',
client_json_file_path = 'keyfile.json'
)

lpath = r''
rpath = ''

with RichCallback() as callback:
fs.put_file(
lpath = lpath,
rpath = rpath,
callback = callback
)
Это пример rich.progress.Progress, и он отлично работает. Он не делает ничего, кроме перебора цикла for для имитации передачи файла.

Код: Выделить всё

total = 200000000
with Progress(
BarColumn(
bar_width = 100,
style = Style(
color = Color.from_rgb(
red = 255,
green = 0,
blue = 0
)
),
complete_style = Style(
color = Color.from_rgb(
red = 0,
green = 255,
blue = 0
)
)
),
"[progress.percentage]",
DownloadColumn(),
TransferSpeedColumn(),
'eta',
TimeRemainingColumn()
) as progress:
task = progress.add_task(description = '', total = total)

for i in range(1, total + 1, 960000):
progress.update(task_id = task, completed = i)
api.Sleep(100)
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... -the-progr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»