저는 rsync 프로토콜을 사용하여 서버에서 로컬 시스템으로 파일을 전송하는 Python/Django 응용 프로그램을 작성하고 있습니다. 대용량 파일을 처리하므로 진행률 막대가 필수입니다. rsync
명령의 --progress
명령이이 기능을 아름답게 처리합니다. 모든 세부 진행 상황이 터미널에 표시됩니다. 웹 브라우저에서 어떻게 진행 상황을 보여줄 수 있습니까? 어떤 후크 기능이 있습니까? 또는 진행 상황을 로그 파일에 저장하고 전화를 걸고 1 분마다 업데이트 할 수 있습니까?DJango를 사용하여 웹 브라우저에서 rsync --progress를 표시하는 방법은 무엇입니까?
답변
기본 원리는 하위 프로세스에서 실행 rsync를하는 것입니다, 웹 API를 노출하고
여기 예제가 자바 스크립트를 통해 업데이트를 얻을.
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
을 통해 사용할 수 있습니다.
고객 측에서는 수시로 progress webservice/API
에 연락하여 javascript (ajax)를 작성하고 해당 정보를 사용하여 클라이언트 측에 뭔가를 제공합니다. 문자 메시지, 이미지 너비, 일부 div 색상 등
답변 해 주셔서 감사합니다. 웹 서비스/API는 어디에서 사용할 수 있습니까? – sachitad
API 작성은 기존의보기 기능 작성과 다를 바 없습니다. 예를 들어 - http://nathanborror.com/posts/2008/aug/11/creating-basic-api-django/ django-tastypie와 같은 "API 프레임 워크"를 사용하고자 할 수 있습니다. –
- 1. django를 사용하여 다운로드하는 방법은 무엇입니까?
- 2. Django를 사용하여 목록 반복 중에 색인을 표시하는 방법은 무엇입니까?
- 3. 다운로드하지 않고 브라우저에서 이미지를 표시하는 방법은 무엇입니까?
- 4. 브라우저에서 Excel 차트를 표시하는 방법은 무엇입니까?
- 5. uiwebview를 사용하여 웹 페이지를 표시하는 방법은 무엇입니까?
- 6. 브라우저에서 웹 페이지를로드하는 방법은 무엇입니까?
- 7. django를 사용하여 사용자 로그인
- 8. django를 사용하여 테이블간에 데이터를 이동하는 방법은 무엇입니까?
- 9. django를 사용하여 POST 요청을 보내는 방법은 무엇입니까?
- 10. 브라우저에서 이미지를 흐리게 표시하는 방법은 무엇입니까?
- 11. 브라우저에서 폴더를 표시하는 방법을 변경하는 방법은 무엇입니까?
- 12. Drupal에서 Django를 인증하는 방법은 무엇입니까?
- 13. OpenShift에서 Django를 구성하는 방법은 무엇입니까?
- 14. 웹 크로스 플랫폼에서 글꼴을 표시하는 방법은 무엇입니까?
- 15. iPhone에서 웹 페이지를 표시하는 방법은 무엇입니까?
- 16. 웹 응용 프로그램에서 알림을 표시하는 방법은 무엇입니까?
- 17. django를 사용하여 다른 웹 사이트에서 사진 올리기
- 18. Django를 사용하여 관계에 고유 한 필드를 설정하는 방법은 무엇입니까?
- 19. 웹 브라우저에서 CMIS 문서를 표시하는 방법
- 20. 웹 브라우저에서 rdf 파일을 표시하는 방법
- 21. js를 사용하여 웹 브라우저에서 이미지를 자르고 서버에 저장하는 방법은 무엇입니까?
- 22. 웹 브라우저에서 링크 레이블을 사용하여 pdf를 여는 방법은 무엇입니까?
- 23. Python을 사용하여 사용자 웹 브라우저에서 북마크를 가져 오는 방법은 무엇입니까?
- 24. 자바 스크립트 (모든 브라우저에서 호환되는 코드)를 사용하여 브라우저에서 로컬 파일의 내용을 표시하는 방법은 무엇입니까?
- 25. 폴더에서 문서를 표시하는 방법은 무엇입니까?
- 26. API를 통해 UPS Delivery Progress를 가져 오는 방법은 무엇입니까?
- 27. 웹 브라우저에서 .NET 프로그램을 시작하는 방법은 무엇입니까?
- 28. 웹 브라우저에서 헤더 배경색을 늘리는 방법은 무엇입니까?
- 29. 브라우저에서 웹 브라우저 컨트롤을 사용하는 방법은 무엇입니까?
- 30. 웹 브라우저에서 이미지를 센터링하는 방법은 무엇입니까?
브라우저가 rsync 또는 웹 브라우저를 통해 서버와 대화하고 있습니까? 한 번에 둘 다? –