Ich schreibe eine Python/Django-Anwendung, die Dateien mit dem rsync-Protokoll vom Server auf den lokalen Rechner überträgt. Wir werden uns mit den großen Dateien beschäftigen, daher ist der Fortschrittsbalken obligatorisch. --progress
Argument in rsync
Befehl macht dies schön. Alle Detailfortschritte werden im Terminal angezeigt. Wie kann ich diesen Fortschritt im Webbrowser zeigen? Gibt es irgendeine Hook-Funktion oder etwas ähnliches? Oder kann ich den Fortschritt in einer Protokolldatei speichern, aufrufen und jede Minute aktualisieren?Wie man den rsync - Fortschritt im Webbrowser mit DJango zeigt?
Antwort
Das Grundprinzip ist Lauf rsync in subprocess, eine Web-API belichten und erhalten Updates via Javascript
Hier ein Beispiel ist.
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')
Aber dies nur zeigt uns den Fortschritt in unserer Standardausgabe (stdout
).
Wir können diesen Code jedoch ändern, um den Fortschritt als JSON-Ausgabe zurückzugeben, und diese Ausgabe kann über eine von uns erstellte progress webservice/API
zur Verfügung gestellt werden.
Auf der Client-Seite verwenden, werden wir dann Javascript (Ajax) schreiben, um unsere progress webservice/API
von Zeit zu Zeit zu kontaktieren, und mit dieser Info-Aktualisierung etwas Client-Seite z. ein Text msg, Breite eines Bildes, Farbe einiger div etc
Vielen Dank für Ihre Antwort. Wo ist Webservice/API verfügbar? – sachitad
Das Erstellen einer API unterscheidet sich nicht vom Erstellen einer herkömmlichen Ansichtsfunktion. Hier ist ein Beispiel - http://nathanborror.com/posts/2008/aug/11/creating-basic-api-django/ Sie möchten vielleicht ein "API Framework" wie Django-tastypie obwohl. –
- 1. Wie man den Fortschritt Dialog in Android zeigt?
- 2. Wie zeigt man den Fortschritt in der Tabellenzelle an?
- 3. Wie zeigt man den Fortschrittsbalken im AmCharts-Gantt-Segment an?
- 4. C# sharcompress: Wie man den Fortschritt überprüft
- 5. Wie man MKV Video im Webbrowser wiedergibt
- 6. Wie man den Fortschritt berichtet vb.net geändert?
- 7. DownloadStringAysnc - zeigt Fortschritt nicht an
- 8. Wie zeigt man den Countdown auf uilabel im iPhone?
- 9. C# ProgressBar zeigt keinen Fortschritt im Media Player
- 10. Rubin zeigt Fortschritt beim Kopieren von Dateien
- 11. Wie zeigt man den offenen Dateidialog im Sitecore-Inhaltseditor?
- 12. Wie zeigt man den Windows-Datei-Kopier-Fortschritt-Dialog durch PB?
- 13. zeigt den Fortschritt Dialog innerhalb einer asynchronen Methode
- 14. GetElementsByXpath im WebBrowser-Dokument?
- 15. Rolling-Prüfsummen im rsync-Algorithmus
- 16. Wie man Diagramme auf Webseite mit Django zeigt?
- 17. Wie bekommt man den Fortschritt von os.walk in Python?
- 18. Wie man Text im IE nur zeigt
- 19. SwipeRefreshLayout zeigt keinen horizontalen Fortschritt an
- 20. Wie kann man benutzerdefiniertes JavaScript im WebBrowser-Steuerelement ausführen?
- 21. Rsync-Fehler: Fehler im Rsync-Protokoll Datenstrom (Code 12)
- 22. Xampp: Webbrowser zeigt nicht die localhost Seite
- 23. AVAssetExportSession stoppt den Fortschritt
- 24. Anklickbare Links im WebBrowser-Steuerelement im Bearbeitungsmodus
- 25. Webbrowser läuft im Kompatibilitätsmodus
- 26. Wie man php-amqplib rabbitMQ im Webbrowser verwendet
- 27. Wie man eine einzelne Datei RSYNC?
- 28. Wie zeigt man den alten Erlaubnisanfrage-Bildschirm?
- 29. Wie zeigt man den ActiveX Yellow bar?
- 30. ProgressDialog in AsyncTask zeigt keinen Fortschritt
Spricht der Browser mit dem Server über Rsync oder über einen Webbrowser? beides auf einmal? –