これが私の小さなプログラムの要点です
特定のディレクトリに新しいファイル (ムービー ファイル) があるかどうかを確認し、それに応じて sqlite3 データベースを更新し、処理するファイルをキューに入れる 1 つの Python スクリプト。launchctl で毎分実行します。
HandBrake コマンド ライン インターフェイスを使用してファイルを変換する実際の処理を行う別の python スクリプト。また、launchctl で毎分実行されます。
その 2 番目のスクリプトでは、変換が完了したら、特定のメタデータを使用してファイルを iTunes にインポートする AppleScript を開始します。
そのため、ディレクトリ内の新しいムービー ファイル -> ファイルがキューに登録されます -> ファイルが変換されます -> ファイルが iTunes にインポートされます。
私が抱えている問題は、applescript の部分にあります。2 つ目の Python スクリプト (変換してからインポートするスクリプト) をターミナルから実行すると、すべてがスムーズに実行されます。ファイルが変換され、applescript がそれを iTunes にインポートします。しかし、スクリプトを起動しているのがlaunchctlの場合、applescriptの部分をスキップしているようです。
これは、Pythonのapplescriptのビットです
import subprocess, shlex
cmd = "/usr/bin/osascript /Users/alexis/Developer/Media/import_iTunes.scpt '{0}' ".format(file)
subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
そしてAppleScript(簡単にするために一部を削除しました)
on run argv
set newTrackPath to posix file (item 1 of argv)
tell application "iTunes"
activate
set newTrack to add newTrackPath
end tell
end run
subprocess.call(cmd)、os.system(cmd)、および subprocess.Popen(cmd) を使用してみました。
問題は、まさにその python スクリプトが launchctl で起動されたときに、python から osascript を起動できないことです。
誰にも説明や回避策がありますか?
ありがとうございました