脚本在终端中运行良好,但在launchd中运行不正常

2024-06-09 19:49:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Python脚本在终端中运行得很好,但是当我试图使用launchd(使用名为Lingon的软件设置)将其设置为每天运行一次时,我就是无法运行它。从我所读到的一切来看,最好从shell脚本调用Python脚本(我在Macbook上,运行Yosemite)。所以,这就是我要做的。当脚本要运行时,我得到的错误是:

未设置TERM环境变量。在

python3:没有这样的文件或目录

在这一点上,我很确定这是一个环境问题,但无论我怎么尝试,我都无法让它运行。顺便说一句,我可以用这种方式让shell脚本按计划运行:

#!/bin/bash
echo "hello world."

当我尝试运行这个程序时,问题就出现了:

^{pr2}$

另外,尽管我已经用电脑工作了很长时间,但我对很多事情还是很无知,所以请告诉我如何像新手一样解决这个问题。在


Tags: 文件目录脚本终端软件环境错误环境变量
2条回答

根据文章here,您需要为launchd创建一个.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>
    <!  The label should be the same as the filename without the extension  >
    <string>org.yourusername.my_script-test</string>
    <!  Specify how to run your program here  >
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/python3</string>
        <string>/Users/jeff/Documents/scripts/my_script.py</string>
    </array>
    <!  Run every hour  >
    <key>StartInterval</key>
    <integer>3600</integer><!  seconds  >
</dict>
</plist>

然后:

^{pr2}$

这里有一篇文章涉及environment variables

我已经尝试了所有提到的,特别感谢Padraic,但似乎没有任何效果。这很奇怪,因为当脚本从终端运行时运行得很好,但是在从launchd运行时会出现错误。当我无法从终端运行时,我无法从终端运行错误。很奇怪。但下面是我如何让它在终端和从launchd按时运行。首先,我改变了shebang线:

#!/usr/bin/env python3

为此:

^{pr2}$

然后,我必须在脚本的其余部分指定文件的完整路径,例如:

log = open('log_directory/my_log.log', 'a')

为此:

log = open('/Users/jeff/documents/my_script_documents/python/development/log_directory/my_log.log', 'a')

不管怎样,现在一切正常,但我相信我遇到的问题可能与我把Mac电脑升级到优胜美地操作系统有关。有人提到约塞米蒂可能有一个关于launchd的bug/launchd.conf/launchctl. 好吧,我想相信不是我在过去的4天里试图让这件事发挥作用…但谁知道呢?在

相关问题 更多 >