从 python 脚本获取输出到 django
get output from python script to django
我正在寻找从 python 脚本获取输出到我的 django 网络服务器。
我将在我的脚本中使用 pySmartDL,所以我需要它 运行 即使当 django 关闭自身并且 django 在启动时需要从 运行ning 脚本获取数据。
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 频道而使事情复杂化。这是你可以用 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')
我正在寻找从 python 脚本获取输出到我的 django 网络服务器。
我将在我的脚本中使用 pySmartDL,所以我需要它 运行 即使当 django 关闭自身并且 django 在启动时需要从 运行ning 脚本获取数据。
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 频道而使事情复杂化。这是你可以用 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')