【问题标题】:Launching osascript from python and launchd从 python 和 launchd 启动 osascript
【发布时间】:2014-03-18 00:42:46
【问题描述】:

这是我的小程序的要点

一个python脚本,它检查某个目录中是否有新文件(电影文件)并相应地更新sqlite3数据库,从而将要处理的文件排队。使用 launchctl 每分钟运行一次。

另一个使用 HandBrake 命令行界面执行转换文件的实际处理的 python 脚本。还使用 launchctl 每分钟运行一次。

在第二个脚本中,一旦转换完成,我想启动一个苹果脚本,它将文件导入 iTunes 中并带有某些元数据。

因此,目录中的新电影文件 -> 文件被排队 -> 文件被转换 -> 文件被导入 iTunes。

我遇到的问题是 applescript 部分。如果我通过终端运行我的第二个 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)。

问题似乎是当使用 launchctl 启动那个非常 python 脚本时,您无法从 python 启动 osascript。

有人有解释或解决方法吗?

谢谢

【问题讨论】:

  • 刚刚尝试了(并编辑了我的问题),并使用了 applescript 的完整路径(以及我使用的 osascript),但仍然没有结果。
  • 系统日志中有任何条目吗? (来自“实用程序”的 Console.app)
  • 我的launchd上有这个com.apple.launchd.peruser.501。节流重生并将在 2 秒后开始。我能找到的就这些了。
  • 有几个问题的答案可以指向EnvironmentalVariables

标签: python applescript launchd osascript


【解决方案1】:

launchd 在哪个用户下运行 Python 脚本?我假设您将它作为当前用户的用户代理运行;如果没有,你应该这样做。

您的 shlex 代码既多余又不安全(例如,考虑一下当您尝试导入 I Wanna Be Bobby's Girl.mp3 时会发生什么)。直接组合参数列表即可。

您的 Python 代码不会费心等待子进程完成或检查其返回码,因此任何失败都会默默地过去。您需要解决这个问题:如果您确实知道它们是什么,那么对任何子流程错误进行故障排除会容易得多。

如果您不关心 AppleScript 的输出,您可以使用 check_call 便利函数,如果 AppleScript 失败,它将抛出异常:

subprocess.check_call(["/usr/bin/osascript", 
        "/Users/alexis/Developer/Media/import_iTunes.scpt", file])

(或者,如果您有直接使用Popen 的实际理由并且为了“简单”而省略了相关代码,请展示它以便我们看到您实际在做什么。)

您可能还想调整您的 launchd XML,以便将 Python 脚本的标准错误写入文件以便于查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多