Получить вывод из скрипта Python в Django
Я ищу получить выходные данные из скрипта Python на мой веб-сервер Django.
Я буду использовать pySmartDL в своем скрипте, поэтому мне нужно, чтобы он запускался даже тогда, когда django закрывался сам, а django должен получать данные из запущенного скрипта при запуске.
Пример сценария pySmartDL:
import time
from pySmartDL import SmartDL
url_100mb_file = ['http://ipv4.download.thinkbroadband.com/100MB.zip']
obj = SmartDL(url_100mb_file, progress_bar=False)
obj.start(blocking=False)
while not obj.isFinished():
print("Speed: %s" % obj.get_speed(human=True))
print("Already downloaded: %s" % obj.get_dl_size(human=True))
print("Eta: %s" % obj.get_eta(human=True))
print("Progress: %d%%" % (obj.get_progress()*100))
print("Progress bar: %s" % obj.get_progress_bar())
print("Status: %s" % obj.get_status())
print("\n"*2+"="*50+"\n"*2)
time.sleep(0.2)
if obj.isSuccessful():
print("downloaded file to '%s'" % obj.get_dest())
print("download task took %ss" % obj.get_dl_time(human=True))
print("File hashes:")
print(" * MD5: %s" % obj.get_data_hash('md5'))
print(" * SHA1: %s" % obj.get_data_hash('sha1'))
print(" * SHA256: %s" % obj.get_data_hash('sha256'))
else:
print("There were some errors:")
for e in obj.get_errors():
print(str(e))
# Do something with obj.get_dest()
Как вы можете видеть здесь, скрипт будет печатать вывод несколько раз, пока файл загружается с этим:
time.sleep(0.2)
Поэтому мне нужно получить вывод динамически.
Я нашел какой-то ответ с помощью websocket (с redis и django-channel или django-redis) и nodeJS, но я не могу найти пример кода для отправки выходных данных скрипта на сервер redis и как получить их из django. И я не знаю много о nodeJS.
Спасибо за ваше время!
1 ответ
Не усложняйте ситуацию, используя каналы node.js и django. Это то, что вы можете сделать только с помощью redis.
rdb = redis.Redis()
while not obj.isFinished():
print("Speed: %s" % obj.get_speed(human=True))
print("Already downloaded: %s" % obj.get_dl_size(human=True))
print("Eta: %s" % obj.get_eta(human=True))
print("Progress: %d%%" % (obj.get_progress()*100))
print("Progress bar: %s" % obj.get_progress_bar())
print("Status: %s" % obj.get_status())
print("\n"*2+"="*50+"\n"*2)
rbd.set('download_progress',obj.get_progress_bar())
time.sleep(0.2)
Тогда в ваших django представлениях, которые нужно знать об этой загрузке
rdb = redis.Redis()
val = rdb.get('download_progress')