如何在mac上启动时使苹果脚本运行终端命令

时间:2014-01-04 01:11:40

标签: python macos terminal startup

我是新手,因此在阅读其他类似问题的帖子时,我无法做出正面或反面。

我正在尝试在启动时运行终端命令,然后关闭终端。

我正在尝试运行的内容: cd / Applications / Sick-Beard-development [enter] python sickbeard.py -d [enter]

我对其他解决方案持开放态度

1 个答案:

答案 0 :(得分:4)

这样做的简单方法就是将所有不必要的东西排除在外。

您要做的是在启动时运行Python脚本。您不希望在终端窗口或任何内容中看到它,因此不需要涉及Terminal.app。你有一个shell脚本的唯一原因是设置工作目录,有更好的方法来做到这一点。大概是你用AppleScript拖动的唯一原因是终端。

您要做的是将Python脚本作为启动代理运行。 Apple的文档可能对新手来说有点混乱,但是有一些很棒的博客文章,比如this one by Nathan Grigg

这个想法是你创建一个plist文件(通过手工编辑XML格式,或者使用OS X和/或Xcode附带的plist编辑器之一,或者使用像Lingon这样的第三方工具)告诉OS X“当这些条件为真时,在该工作目录中运行此命令”。然后将该文件放在〜/ Library / LaunchAgents中。然后你告诉launchctl加载它。你已经完成了。

你的plist看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.user3159170.sickbeard</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/python</string>
        <string>/Applications/Sick-Beard-development/sickbeard.py</string>
        <string>-d</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/Applications/Sick-Beard-development/</string>
    <key>RunAtLoad</key>
    <true />
    <key>LaunchOnlyOnce</key>
    <true />
</dict>
</plist>

这些设置将确保OS X在您第一次加载启动代理时运行程序,并且在每次后续重新启动后第一次登录时运行程序,而不是其他时间,我认为这是您想要的。但man launchd.plist将为您提供所有选项的详细信息(或者,再次阅读链接的博客文章并搜索其他选项)。

将其保存为〜/ Library / LaunchAgents / org.user3159170.sickbeard.plist。

现在,在终端,执行此操作:

launchctl load ~/Library/LaunchAgents/org.user3159170.sickbeard.plist

您可能需要查看您的Console.log以了解会发生什么。您可以尝试手动启动和停止它(man launchctl将解释如何,但基本上它只是launchctl start org.user3159170.sickbeard)。运行launchctl list以确保它显示出来。一旦它看起来一切正常,重启机器,登录,并确保它再次运行。如果确实如此,那就完成了。