繁体   English   中英

当由launchd运行时,Python子进程不起作用

[英]Python subprocess doesn't work when ran by launchd

我有一个Python脚本,它使用子进程来运行改变我的桌面背景的AppleScript。 定期通过launchd调用bash脚本来运行Python脚本。

当我从命令行运行bash脚本时,它运行正常,但问题是当launchd以相同的方式调用bash脚本时,AppleScript似乎不起作用(我已调试它直到这一点,并且在子进程调用之前的一切工作正常)。 我的猜测是它的权限问题,但是launchd似乎像我一样运行脚本。 我甚至尝试过以root身份运行它仍然无效。 将其作为守护程序和用户管理员(/ Library / LaunchAgents)运行,也不起作用。

这是我的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>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.foo.background.change</string>
        <key>Nice</key>
        <integer>-15</integer>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>-c</string>
                <string>/Users/scott/Projects/Background/env/bin/Background/change_background.sh</string>
        </array>
        <key>ServiceDescription</key>
        <string>Runs a script to change the desktop background image.</string>
        <key>ServiceIPC</key>
        <false/>
        <key>StartInterval</key>
        <integer>60</integer>
        <key>UserName</key>
        <string>scott</string>
</dict>
</plist>

任何和所有的帮助表示赞赏!

编辑:感谢您的回复! 这是python脚本。 从另一个确定要使用的图像的方法调用set_desktop_background 始终使用完整图像路径。

import subprocess

SCRIPT = """/usr/bin/osascript<<END
tell application "Finder"
set desktop picture to POSIX file "%s"
end tell
END"""

def set_desktop_background(filepath):
    subprocess.Popen(SCRIPT%filepath, shell=True)

终于想通了。 在我编写此脚本的某个地方,我在OSX的系统偏好设置中启用了“更改图片:每天”功能(我想看看我是否能找到用于此过程的plist)。 一旦我终于意识到并禁用它,launchd就可以通过我的脚本更改背景。

我仍然不确定为什么会发生这种情况,因为当我手动运行脚本时我能够改变背景,但是哦。

谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM