Python脚本在终端中工作,但不在launchd中工作

时间:2016-05-23 05:21:33

标签: python macos launchd

我试图在OS X上使用launchd运行python脚本。当我使用以下命令从终端运行它时,它可以工作:

x[1]

这是我的launchd plist文件,它在ProgramArguments键下有相同的命令,但它不起作用。

$ /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /Users/me/path/to/script.py

launchd最初没有工作,所以我尝试在终端中手动运行它,我得到一个错误,并意识到我需要在他们的完整路径中引用我正在阅读和写入python脚本的文件,所以我修好了。这使得脚本在终端中运行但它没有解决launchd中的问题(是的,我已经多次卸载并加载它)。

我运行<?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>net.me.my-script</string> <key>ProgramArguments</key> <array> <string>/Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4</string> <string>/Users/me/path/to/script.py</string> </array> <key>StartInterval</key> <integer>86400</integer> </dict> </plist> 并在我的plist旁边找到了launchctl list退出代码,然后我检查了/var/log/system.log并找到了错误消息1但是这都是我能找到的错误信息。

根据“最后修改”日期和finder中的内容,它似乎在python脚本中打开了一个xml文件,但它没有写任何内容。它似乎也没有在脚本中打开json文件。

同样,所有这些东西在终端中手动运行都很好,所以我认为它必须是一个plist或launchd问题。

1 个答案:

答案 0 :(得分:0)

解决。我能够设置StandardErrorPath和StandardOutPath键,并查看脚本抛出的错误。在操作xml文件时,我在f.write()f.read()的实例上获得了一些with open('file.xml', 'w') as f:,但只有在通过launchd运行脚本时。我将with io.open('file.xml', 'w', encoding='utf8') as f:替换为s,并将其替换为读取实例,并且它可以正常工作!任何人都知道为什么这在我的IDE和终端中工作正常但不是在launchd?所有人都使用相同的翻译。