python - 从python脚本获取输出到django

标签 python node.js django redis django-redis

我正在寻找从 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-channels 或 django-redis)和 nodeJS 找到了一些答案,但我找不到将脚本输出发送到 redis 服务器以及如何从 django 获取它们的代码示例。而且我对nodeJS了解不多。

感谢您的宝贵时间!

最佳答案

不要因为涉及 node.js 和 django channel 而使事情复杂化。这是你可以用 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 View 中需要知道这个下载

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

关于python - 从python脚本获取输出到django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390938/

相关文章:

python - 在 GIMP 中的路径上附加文本

python - 使用 matplotlib 绘制移动多边形

Python:为什么我的程序无法从列表写入文件?

javascript - 修改 MongoDB 以允许跨源请求

python - cv2.HoughCircles 找不到循环时

javascript - 需要与异步函数执行流程相关的帮助(await、promise、node.js)

javascript - 如何优雅地从 firebase 读取一个 >>new<< 项目?

python - 如果下一步不存在,则尝试隐藏按钮

python - 如何在 Django 中覆盖用户名 max_length ?

python - 仅对一个注释列应用过滤器而不影响其他注释列?