में ओपूट फ़ाइल पुनर्निर्देशन मैं एक बैकअप स्क्रिप्ट लिख रहा हूं जिसे मैं हर रात एक cronjob में निष्पादित करना चाहता हूं।पायथन
स्क्रिप्ट sys.stdout और sys.stderr को आउटपुट फ़ाइल में सेट करता है ताकि यह पता चल सके कि क्या होता है।
बैकअप मैं निम्नलिखित कोड
cmd = 'rsync -av --del --stats --filter "- .thumbnails/" ' + \
'--filter "- *~" --filter "- *.iso" --filter "- lost+found/" ' + \
'--filter "- .cache/" --filter "- tmp/" --filter "- *.mp3" ' + \
'--filter "- *.log" ' + srcDir + ' ' + dstDir
print "Executing '"+cmd+"' ..."
try:
sys.stdout.flush()
sys.stderr.flush()
retcode = subprocess.call(cmd, stdin = sys.stdin, stdout = sys.stdout,
stderr=sys.stderr, shell=False)
if retcode < 0:
print >>sys.stderr, "Command was terminated by signal", -retcode
elif retcode > 0:
print >>sys.stderr, "Command returned code ", retcode
except OSError, e:
print >>sys.stderr, "Execution failed:", e
मैंने पहले और उपप्रक्रिया कॉल के बाद प्रिंट बयान जोड़ने का उपयोग करने के लिए। समस्या यह है कि कॉल से पहले मेरे प्रिंट निर्देशों के किसी आउटपुट से पहले मुझे सबप्रोसेस कॉल का आउटपुट मिलता है। मैंने फ्लश() कॉल जोड़ा लेकिन इसका कोई प्रभाव नहीं पड़ा।
यह क्यों हो रहा है और मैं इस व्यवहार को कैसे बदल सकता हूं?
आप sys.stdout और sys.stderr कैसे सेट कर रहे हैं? – Ned
यह सही लगता है और ऐसा व्यवहार नहीं करना चाहिए (और जब मैं कोशिश करता हूं), क्या आप अपने पर्यावरण का वर्णन कर सकते हैं (ओएस, खोल जिसमें से आप स्क्रिप्ट लॉन्च करते हैं)? – RedGlyph
आप मौजूदा उपकरण जैसे 'rsnapshot' का उपयोग क्यों नहीं करते हैं (यह' rsync' का भी उपयोग करता है)। – jfs