Python 脚本在通过 osascript 启动时不起作用
Python script does not work when started via osascript
好的,所以当我 运行 这个命令时:
sudo python3.5 /path/to/my/script.py
它执行得很好 returns:
select user:
- Guest
My username
Choose the account that needs cleaning up (enter corresponding number):
然后我输入“2”,按回车键,脚本 运行 很好。
然而,当我运行:
osascript -e 'do shell script "python3.5 /Path/to/my/script.py" with administrator privileges'
我得到了预期的弹出屏幕,可以在其中输入我的 sudo 密码,但之后它抛出了错误:
OSError: [Errno 9] Bad file descriptor (1)needs cleaning up (enter
corresponding number):")
有人对此有任何想法吗?任何帮助将不胜感激!
PS;关于为什么我需要这种方法的一些背景知识 --> 我正在使用需要从中执行 myscript.py 的预脚本(也是用 python 编写的)。我的prescript.py不需要管理员权限。但是,有时需要调用 myscript.py,而 需要管理权限。因为我不想将我的 sudo 密码硬编码到我的任何脚本中,所以我想要一个弹出框来询问我。我想,在我上面提到的 osascript 命令上告诉我的 pre-script.py 到 运行 subprocess.Popen([]) 就可以了。但是,为此,我首先需要让 osascript 命令正常工作。
啊,所以我自己想出了这个。不出所料,这与特权有关。不知何故 "do shell script"
是 运行 通过其他权限然后只需在终端中输入命令。终端中的 "sudo command"
不(完全)等于 "do shell script [script] with administrator privileges"
.
对我来说,解决它的方法是导航到:
系统偏好设置 --> 安全和隐私 --> 隐私选项卡 --> 辅助功能
然后将Python.app和Terminal.app拖到那个window(你可能需要先按那个[=左下角的小锁解锁它) 23=]).
好的,所以当我 运行 这个命令时:
sudo python3.5 /path/to/my/script.py
它执行得很好 returns:
select user:
- Guest
My username
Choose the account that needs cleaning up (enter corresponding number):
然后我输入“2”,按回车键,脚本 运行 很好。
然而,当我运行:
osascript -e 'do shell script "python3.5 /Path/to/my/script.py" with administrator privileges'
我得到了预期的弹出屏幕,可以在其中输入我的 sudo 密码,但之后它抛出了错误:
OSError: [Errno 9] Bad file descriptor (1)needs cleaning up (enter corresponding number):")
有人对此有任何想法吗?任何帮助将不胜感激!
PS;关于为什么我需要这种方法的一些背景知识 --> 我正在使用需要从中执行 myscript.py 的预脚本(也是用 python 编写的)。我的prescript.py不需要管理员权限。但是,有时需要调用 myscript.py,而 需要管理权限。因为我不想将我的 sudo 密码硬编码到我的任何脚本中,所以我想要一个弹出框来询问我。我想,在我上面提到的 osascript 命令上告诉我的 pre-script.py 到 运行 subprocess.Popen([]) 就可以了。但是,为此,我首先需要让 osascript 命令正常工作。
啊,所以我自己想出了这个。不出所料,这与特权有关。不知何故 "do shell script"
是 运行 通过其他权限然后只需在终端中输入命令。终端中的 "sudo command"
不(完全)等于 "do shell script [script] with administrator privileges"
.
对我来说,解决它的方法是导航到:
系统偏好设置 --> 安全和隐私 --> 隐私选项卡 --> 辅助功能
然后将Python.app和Terminal.app拖到那个window(你可能需要先按那个[=左下角的小锁解锁它) 23=]).