我希望我的AppleScript应用程序运行带有sudo
的Python脚本,但我不希望应用程序提示用户输入密码(我们的用户没有sudo权限)。
Python脚本已适当地添加到/etc/sudoers
文件中(ALL ALL=NOPASSWD: /path/to/script.py
)。在终端中,我可以做(作为常规,非特权用户):
$ sudo ./script.py
它运行得非常好。但是在AppleScript中尝试这样做时:
do shell script "sudo ./script.py"
你当然得到“sudo:no tty present and no askpass program specified”错误。但是如果你改成它:
do shell script "./script.py" with administrator privileges
AppleScript坚持要求提供一个弹出窗口来询问密码。我也尝试使用管道将空密码传递给sudo:
do shell script "echo '' | sudo -S ./script.py"
但这也行不通。 (我认为它首先尝试单独运行sudo然后传递命令,这将无效,因为用户没有sudo权限!)
我需要一个AppleScript将使用sudo运行Python脚本的解决方案。出于安全原因,我希望普通用户保持脚本不可读和不可执行,并且只能通过AppleScript执行。 (我知道,假设用户可以调用sudo script.py
并且它会运行,但这是假设他们甚至知道sudoers;我试图尽可能保持它尽可能安全,但仍然可用。)
我仍然是AppleScript的新手,所以任何帮助都将不胜感激!谢谢!
答案 0 :(得分:0)
当我将ALL ALL=NOPASSWD: /Users/myusername/a
添加到sudoers并运行echo $'#!/bin/bash\nsay $(ls ~root|head -n1)'>~/a;chmod +x ~/a
时,do shell script "sudo ~/a"
以root身份运行该脚本而无需密码。
我猜测问题是您指定了do shell script "sudo ./script.py"
之类的路径。请尝试使用do shell script "sudo ~/script.py"
。 do shell script
的默认工作目录是/
,而不是~/
。