我正在编写一个使用rsync协议将文件从服务器传输到本地计算机的Python/Django应用程序。我们将处理大文件,因此进度栏是强制性的。 rsync
命令中的--progress
参数可以很好地执行此操作。所有的细节进展都显示在终端中。如何显示Web浏览器的进度?有没有钩子功能或类似的东西?或者我可以将进度存储在日志文件中,调用它并每隔一分钟更新一次?如何使用DJango显示网页浏览器中的rsync --progress?
回答
的基本原理是在子运行rsync的,公开Web API并获取即时更新通过JavaScript
下面是一个例子。
import subprocess
import re
import sys
print('Dry run:')
cmd = 'rsync -az --stats --dry-run ' + sys.argv[1] + ' ' + sys.argv[2]
proc = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,)
remainder = proc.communicate()[0]
mn = re.findall(r'Number of files: (\d+)', remainder)
total_files = int(mn[0])
print('Number of files: ' + str(total_files))
print('Real rsync:')
cmd = 'rsync -avz --progress ' + sys.argv[1] + ' ' + sys.argv[2]
proc = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,)
while True:
output = proc.stdout.readline()
if 'to-check' in output:
m = re.findall(r'to-check=(\d+)/(\d+)', output)
progress = (100 * (int(m[0][1]) - int(m[0][0])))/total_files
sys.stdout.write('\rDone: ' + str(progress) + '%')
sys.stdout.flush()
if int(m[0][0]) == 0:
break
print('\rFinished')
但是,这只显示我们在标准输出(stdout
)中的进展。
我们可以但是,修改此代码返回进步为JSON输出,并且可以通过我们创建一个progress webservice/API
可以提供这种输出。
在客户端使用,我们会写javascript(ajax)来不时地联系我们的progress webservice/API
,并使用该信息更新客户端的一些信息,例如,文本消息,图像宽度,某些div的颜色等
谢谢你的回答。 Web服务/ API可用在哪里? – sachitad
创建API与创建传统视图函数没有区别。下面是一个例子 - http://nathanborror.com/posts/2008/aug/11/creating-basic-api-django/ 尽管你可能想使用“API框架”,比如django-tastypie。 –
- 1. 如何在浏览器中使用网页浏览器控件?
- 2. 显示网页浏览器请求
- 3. 如何在网页浏览器中显示碧玉报告
- 4. 如何在BlackBerry浏览器字段中显示网页?
- 5. 如何让网页显示其浏览的平台和浏览器?
- 6. 显示Safari浏览器浏览网页在iPhone
- 7. 如何下载网页源并在网页浏览器中显示?
- 8. 如何在JFrame Web浏览器视图中显示以显示网页?
- 9. 如何使网页适合浏览器
- 10. 使用网页浏览器打印文档显示
- 11. 如何使用asp.net浏览和显示网页浏览器中的Excel工作表?
- 12. css - 如何在手机浏览器上正确显示网页
- 13. Web浏览器控件未显示Html,但显示网页
- 14. asp.net如何使IE浏览器无法显示网页错误页面
- 15. 如何分页浏览页面显示?
- 16. WP7网页浏览器控件使用IE浏览器,如何使用不同的浏览器
- 17. Django的网址,浏览器
- 18. 网页浏览器内的网页浏览器
- 19. 网页浏览器中的显示下载对话框
- 20. 如何而HTML网页的浏览器
- 21. 显示多个网页浏览
- 22. Django PDF:如何在浏览器中显示进度?
- 23. 如何在浏览器中显示pdf
- 24. 如何在浏览器中提供网址时将网页上传到网页并显示网页?
- 25. 如何创建像Chrome浏览器等网页浏览器
- 26. 如何网页浏览器设置为文本浏览器
- 27. WEC7网页浏览器控件不显示页面
- 28. 如何使浏览器显示更改为静态网站
- 29. 浏览器插件显示网页是从浏览器缓存还是网页服务器加载
- 30. TinyMCE不会在IE8浏览器中显示网页内容
浏览器是通过rsync还是通过网络浏览器与服务器通话?两者同时? –