मैं एक पाइथन/Django एप्लिकेशन लिख रहा हूं जो सर्वर से फ़ाइलों को स्थानीय मशीन पर rsync प्रोटोकॉल का उपयोग कर स्थानांतरित करता है। हम बड़ी फाइलों से निपटेंगे ताकि प्रगति पट्टी अनिवार्य हो। --progress
rsync
कमांड में तर्क यह खूबसूरती से करता है। सभी विस्तार प्रगति टर्मिनल में दिखाए जाते हैं। मैं वेब ब्राउजर में प्रगति कैसे दिखा सकता हूं? क्या कोई हुक फ़ंक्शन या ऐसा कुछ है? या क्या मैं प्रगति को लॉग फ़ाइल में संग्रहीत कर सकता हूं, इसे कॉल कर सकता हूं और हर एक मिनट या उससे भी अपडेट कर सकता हूं?dsango का उपयोग कर वेब ब्राउज़र में rsync - प्रगति को कैसे दिखाएं?
उत्तर
बुनियादी सिद्धांत उपप्रक्रिया में रन rsync करने के लिए है, एक वेब एपीआई का पर्दाफाश और जावास्क्रिप्ट के माध्यम से
यहाँ एक उदाहरण है अपडेट प्राप्त करें।
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
) में प्रगति को दर्शाता है।
हालांकि, हम जेएसओएन आउटपुट के रूप में प्रगति को वापस करने के लिए इस कोड को संशोधित कर सकते हैं और यह आउटपुट progress webservice/API
के माध्यम से उपलब्ध कराया जा सकता है।
क्लाइंट साइड उपयोग पर, हम समय-समय पर हमारे progress webservice/API
से संपर्क करने के लिए जावास्क्रिप्ट (AJAX) लिखेंगे, और उस जानकारी का उपयोग करके कुछ क्लाइंट साइड अपडेट करें। एक पाठ संदेश, छवि की चौड़ाई, कुछ div आदि का रंग
आपके उत्तर के लिए धन्यवाद। Webservice/API कहां उपलब्ध है? – sachitad
एक एपीआई बनाना पारंपरिक दृश्य फ़ंक्शन बनाने से अलग नहीं है। यहां एक उदाहरण दिया गया है - http://nathanborror.com/posts/2008/aug/11/creating-basic-api-django/ हो सकता है कि आप "एपीआई फ्रेमवर्क" जैसे कि डीजेंगो-टेस्टपीपी का उपयोग करना चाहें। –
क्या ब्राउज़र rsync के माध्यम से या वेब ब्राउज़र के माध्यम से सर्वर से बात कर रहा है? दोनों एक बार में? –