Python 如何让apple脚本在mac上启动时运行终端命令

Python 如何让apple脚本在mac上启动时运行终端命令,python,macos,terminal,startup,Python,Macos,Terminal,Startup,我对这一点还不熟悉,所以在阅读其他类似问题的帖子时,我无法做出正面或反面的回答 我试图在启动时运行终端命令,然后关闭终端 我正在尝试运行的内容: cd/应用程序/开发[输入] python.py-d[输入] 我对其他解决方案持开放态度简单的方法是把所有不必要的东西都清除掉 您要做的是在启动时运行Python脚本。您不想在终端窗口或其他任何地方看到它,因此不需要涉及terminal.app。使用shell脚本的唯一原因是设置工作目录,有更好的方法可以做到这一点。而你拖入AppleScript的唯一

我对这一点还不熟悉,所以在阅读其他类似问题的帖子时,我无法做出正面或反面的回答

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

我正在尝试运行的内容: cd/应用程序/开发[输入] python.py-d[输入]


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

简单的方法是把所有不必要的东西都清除掉

您要做的是在启动时运行Python脚本。您不想在终端窗口或其他任何地方看到它,因此不需要涉及terminal.app。使用shell脚本的唯一原因是设置工作目录,有更好的方法可以做到这一点。而你拖入AppleScript的唯一原因大概是为了终端

您要做的是将Python脚本作为启动代理运行。对于新手来说,苹果关于这方面的文档可能有点混乱,但是有一些很棒的博客帖子,比如

其思想是创建一个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>

您可能需要查看Console.log以了解发生了什么。您可以尝试手动启动和停止它(
manlaunchctl
将解释如何启动,但基本上只是
launchctl start org.user3159170.sickbeard
)。运行
launchctl list
以确保其显示。一旦一切正常,重新启动计算机,登录,并确保它再次运行。如果成功了,你就成功了。

简单的方法是把所有不必要的东西都清除掉

您要做的是在启动时运行Python脚本。您不想在终端窗口或其他任何地方看到它,因此不需要涉及terminal.app。使用shell脚本的唯一原因是设置工作目录,有更好的方法可以做到这一点。而你拖入AppleScript的唯一原因大概是为了终端

您要做的是将Python脚本作为启动代理运行。对于新手来说,苹果关于这方面的文档可能有点混乱,但是有一些很棒的博客帖子,比如

其思想是创建一个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>

您可能需要查看Console.log以了解发生了什么。您可以尝试手动启动和停止它(
manlaunchctl
将解释如何启动,但基本上只是
launchctl start org.user3159170.sickbeard
)。运行
launchctl list
以确保其显示。一旦一切正常,重新启动计算机,登录,并确保它再次运行。如果是这样的话,你就完成了。

你有没有理由必须使用AppleScript来运行终端来运行shell脚本来运行Python脚本,而不是一开始就运行Python脚本?没有,一点也不,只是不知道如何做。。。只要我能让它在后台运行,它真的必须在启动时运行,还是可以在你的普通用户帐户登录时运行?可以在登录时运行。。。因为我每次开机都要登录。。。从来没有想过它们是不同的。有没有理由你必须使用AppleScript来运行终端来运行shell脚本来运行Python脚本,而不是,比如说,一开始就运行Python脚本?没有,根本没有,只是不知道怎么做。。。只要我能让它在后台运行,它真的必须在启动时运行,还是可以在你的普通用户帐户登录时运行?可以在登录时运行。。。因为我每次开机都要登录。。。我的天哪,这是一个令人惊讶的答案,但是,唉,这是我无法理解的。我想这就是为什么我想得到applescript和terminal。。。我明白了:python.py-d。。。。看起来这应该是一件容易的事情,但我发现了不同的地方。@user3159170:你读过我链接的博文了吗?你看过他推荐的工具了吗?如果你不想自己解决所有这些问题,那么买一个只为你编写、配置和安装plist文件的程序可能值5美元。。。我找到了一个对我来说足够简单的东西,尝试了一下,它成功了:打开Automator并选择一个新的工作流在文本框中添加一个“运行Shell脚本”操作添加到以下脚本:“/usr/local/bin/python/path/to/sickbeard/sickbeard.py-d”将工作流另存为应用程序文件夹中的应用程序转到“系统首选项”>“帐户”>“用户”>“登录项”添加您刚刚使用Automator创建的应用程序@abarnert描述的所有功能都正常工作,但我的脚本应作为服务运行(我使用reactor form twisted.internet library启动多个线程)但是它退出了——所有线程都关闭了。如果我从命令行运行该文件,一切正常。对此有什么想法吗?天哪,这是一个惊人的答案,但唉,这超出了我的理解范围。我想这就是为什么我想得到applescript和terminal。。。我明白了:python.py-d。。。。看起来这应该是一件容易的事情,但我发现了不同的地方。@user3159170:你读过我链接的博文了吗?你看过他推荐的工具了吗