Tôi đang viết một ứng dụng Python/Django chuyển tệp từ máy chủ sang máy cục bộ bằng giao thức rsync. Chúng tôi sẽ xử lý các tệp lớn để thanh tiến trình là bắt buộc. --progress
đối số trong rsync
lệnh thực hiện điều này thật đẹp. Tất cả các tiến trình chi tiết được hiển thị trong thiết bị đầu cuối. Làm thế nào tôi có thể cho thấy sự tiến bộ đó trong trình duyệt web? Có chức năng móc hay gì đó như thế không? Hoặc tôi có thể lưu trữ tiến trình trong một tệp nhật ký, gọi nó và cập nhật nó mỗi một phút hoặc lâu hơn?Cách hiển thị rsync --progress trong trình duyệt web bằng DJango?
Trả lời
Nguyên tắc cơ bản là để chạy rsync trong tiến trình con, phơi bày một API web và nhận được cập nhật thông qua javascript
Dưới đây là một ví dụ.
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')
Nhưng điều này chỉ cho chúng ta thấy tiến độ trong đầu ra tiêu chuẩn của chúng tôi (stdout
).
Tuy nhiên, chúng tôi có thể sửa đổi mã này để trả về tiến trình dưới dạng đầu ra JSON và đầu ra này có thể được cung cấp qua progress webservice/API
mà chúng tôi tạo.
Khi sử dụng phía máy khách, sau đó chúng tôi sẽ viết javascript (ajax) để liên hệ với chúng tôi progress webservice/API
và sử dụng thông tin đó cập nhật mặt khách hàng nào đó, ví dụ: tin nhắn văn bản, chiều rộng của hình ảnh, màu sắc của một số div, v.v.
Cảm ơn bạn đã trả lời. API webservice/API có sẵn ở đâu? – sachitad
Tạo một API không khác với việc tạo ra một chức năng xem truyền thống. Dưới đây là ví dụ - http://nathanborror.com/posts/2008/aug/11/creating-basic-api-django/ Bạn có thể muốn sử dụng "Khung API" chẳng hạn như django-tastypie. –
- 1. Hiển thị csv trong trình duyệt firefox
- 2. Xampp: trình duyệt web sẽ không hiển thị trang localhost
- 3. Cách hiển thị luồng PDF trong trình duyệt bằng cách sử dụng javascript
- 4. Không hiển thị các thư mục trong đầu ra rsync
- 5. trình duyệt sẽ hiển thị thay vì '
- 6. Thư viện để hiển thị BPMN 2.0 trong trình duyệt
- 7. Hiển thị Pdf trong trình duyệt bằng cách sử dụng java servlet
- 8. Hiển thị đồ họa véc tơ trong một trình duyệt
- 9. Đường viền CSS không hiển thị trong trình duyệt
- 10. Nhúng XSL vào XML để hiển thị trong Trình duyệt web: Tôi đang làm gì sai?
- 11. Django - hiển thị tiến trình hành động
- 12. Hiển thị hình ảnh TIFF trong tất cả trình duyệt web
- 13. Trình duyệt web nhúng
- 14. TinyMCE không hiển thị nội dung trang web trong trình duyệt IE8
- 15. Lỗi PHP không hiển thị trong trình duyệt
- 16. Hiển thị biểu đồ có hướng trong trình duyệt
- 17. .ppy hiển thị mã trong trình duyệt thay vì chạy
- 18. jEditorPane dưới dạng trình duyệt web
- 19. Làm cách nào để hiển thị hộp thoại trình duyệt tệp hoặc thư mục bằng MATLAB
- 20. Trình duyệt Ctrl + F tìm văn bản không hiển thị
- 21. Phonegap có thể hiển thị trang web trên điện thoại di động của tôi trong trình duyệt được nhúng không?
- 22. Trình duyệt web nào hỗ trợ các trình duyệt web?
- 23. Làm cách nào để luôn hiển thị thanh cuộn dọc trong trình duyệt?
- 24. WAMP: Cách hiển thị thông báo cảnh báo trong trình duyệt?
- 25. Cách tải xuống và hiển thị bảng tính excel trong trình duyệt
- 26. Django - Hiển thị ImageField
- 27. Cách đóng tab trong trình duyệt web bên ngoài?
- 28. Hiển thị hình ảnh dưới dạng luồng dữ liệu trong trình duyệt Android
- 29. Trình duyệt web: Ẩn con trỏ chuột
- 30. Cần dòng lệnh để khởi động trình duyệt web bằng cách sử dụng adb
Trình duyệt có đang nói chuyện với máy chủ qua rsync hoặc qua trình duyệt web không? cả hai cùng một lúc? –