2017-06-06 1 views
1

Ich bin für die Ausgänge von einem Python-Skript zu meinem Django-Webserver erhalten.
Ich werde pySmartDL in meinem Skript verwenden, also muss ich es auch ausführen, wenn sich django selbst schließt und django beim Start Daten aus einem laufenden Skript benötigt.Ausgabe von Python-Skript zu Django

pySmartDL exemple Skript:

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() 

Wie Sie das Skript mehrmals druckt Ausgabe sehen hier kann, während eine Datei mit diesem ist das Herunterladen:

time.sleep(0.2) 

Also muss ich das bekommen dynamisch ausgeben
Ich habe eine Antwort gefunden mit Websocket (mit redis und django-channels oder django-redisis) und nodeJS, aber ich kann kein Codebeispiel finden, um die Skriptausgabe an redis server zu senden und wie man sie von django bekommt. Und ich weiß nicht viel über NodeJS.

Danke für Ihre Zeit!

Antwort

0

Machen Sie keine komplizierten Dinge, indem Sie node.js und django-Kanäle einbeziehen. Dies ist etwas, was Sie nur mit redis tun können.

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) 

Dann in Ihrer django Ansicht, die

rdb = redis.Redis() 
val = rdb.get('download_progress') 
+0

Also brauche ich nicht django-redis zum Download wissen? – HolyFredy

+0

Ich sehe nicht, wie es nützlich sein könnte. Es ist eine Alternative zu Memcache AFAIK – e4c5

+0

ok, danke für die Antwort – HolyFredy