私は毎晩cronjobで実行する予定のバックアップスクリプトを作成しています。Pythonの出力ファイルのリダイレクト
スクリプトはsys.stdoutとsys.stderrを出力ファイルに設定し、発生したログを記録します。私は、サブプロセスの呼び出しの前と後にprint文を追加し、次のコード
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()呼び出しを追加しましたが、効果はありません。
なぜこのようなことが起こりますか、どうやってこの動作を変更できますか?
どのようにsys.stdoutとsys.stderrを設定していますか? – Ned
これは正しいようで、そのように動作してはいけません(試しても動作しません)。環境(OS、シェルを起動するシェル)を記述できますか? – RedGlyph
'rsnapshot'(' rsync'も使用しています)のような既存のツールを使わないのはなぜですか? – jfs