2014-03-04 44 views
0

我想让我的AppleScript应用程序运行一个sudo的Python脚本,但我不希望应用程序提示用户输入密码(我们的用户没有sudo权限)。如何在不提示输入密码的情况下通过AppleScript以管理员权限运行shell脚本?

Python脚本已被正确添加到/etc/sudoers文件中(ALL ALL=NOPASSWD: /path/to/script.py)。在终端中,我可以做(如常规的非特权用户):

$ sudo ./script.py 

和它运转很好。但在AppleScript的,当你尝试做:

do shell script "sudo ./script.py" 

当然,你得到了“命令:不存在TTY并没有指定任何askpass程序”的错误。但是,如果将其更改为:

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

当我将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/而不是~/

+0

我没有意识到'do shell script'在'/'中做了些什么 - 这很好理解!我已经用绝对路径替换了所有路径,现在一切正常。非常感谢! –

相关问题