Я пытаюсь распечатать на консоли до и после обработки, которая занимает некоторое время в команде управления Django, например:
import requests
import xmltodict
from django.core.management.base import BaseCommand
def get_all_routes():
url = 'http://busopen.jeju.go.kr/OpenAPI/service/bis/Bus'
r = requests.get(url)
data = xmltodict.parse(r.content)
return data['response']['body']['items']['item']
class Command(BaseCommand):
help = 'Updates the database via Bus Info API'
def handle(self, *args, **options):
self.stdout.write('Saving routes ... ', ending='')
for route in get_all_routes():
route_obj = Route(
route_type=route['routeTp'], route_id=route['routeId'], route_number=route['routeNum'])
route_obj.save()
self.stdout.write('done.')
В приведенном выше коде ожидается, что Saving routes ...
print перед начинается l oop, и done.
сразу рядом с ним, когда l oop завершается, так что в конце он выглядит как Saving routes ... done.
.
Однако, первый не печатается до тех пор, пока l oop не завершится, когда обе строки, наконец, будут напечатаны одновременно, чего я не ожидал.
Я нашел этот вопрос , где Ответ предлагает очистить вывод, т.е. self.stdout.flush()
, поэтому я добавил это в свой код:
def handle(self, *args, **options):
self.stdout.write('Saving routes ... ', ending='')
self.stdout.flush()
for route in get_all_routes():
route_obj = Route(
route_type=route['routeTp'], route_id=route['routeId'], route_number=route['routeNum'])
route_obj.save()
self.stdout.write('done.')
Тем не менее, результат остается неизменным.
Что я мог сделать не так?