Я пишу сценарий резервного копирования, который я намерен выполнять в 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
Я добавляю операторы печати до и после вызова подпроцесса.
Проблема в том, что я получаю вывод вызова подпроцесса перед любым выводом моих инструкций печати перед вызовом. Я добавил вызовы flush (), но это не имеет никакого эффекта.
Почему это происходит и как я могу изменить это поведение?