Unison を介して同期を自動化し、ログに記録する簡単なスクリプトを作成しようとしています。また、推奨されていないため、通常の os.system 呼び出しではなく subprocess.Popen を使用しています。過去 2 日間、ドキュメントなどを調べて何が間違っているのかを理解しようとしましたが、何らかの理由で端末から unison を呼び出しても問題はありませんが、Python から同じ呼び出しを行うと、ユーザーとのやり取りを試みます。さらに、出力の約半分をキャプチャしていませんが、もう一方はまだ端末に出力しています。
これが私が使用しようとしている私のコードです:
sync = Popen(["unison", "sync"], shell = True, stdout = PIPE)
for line in sync.stdout
logFile.write(line)
sync.wait()
if sync.returncode == 0 or sync.returncode == None:
logFile.write("Sync Completed Successfully\n")
else
logFile.write("!! Sync Failed with a returncode of: " + str(sync.returncode) + "\n")
これが私のUnison設定ファイルです:
root = /home/zephyrxero/temp/
root = /home/zephyrxero/test/
auto = true
batch = true
prefer = newer
times = true
owner = true
group = true
retry = 2
私は何を間違っていますか?Unison からのすべての出力がログファイルに保存されないのはなぜですか? また、スクリプトの実行時に確認を求められるのに、ターミナルから単純に実行したときに確認が求められないのはなぜですか?
更新: OK、Emil のおかげで、すべての出力をキャプチャしていますが、「unison sync」とターミナルに入力すると、スクリプトから呼び出した場合とは異なる結果が得られる理由がまだわかりません。