gpt4 book ai didi

python - 以 root 身份运行 python 脚本

转载 作者:太空狗 更新时间:2023-10-30 00:55:59 26 4
gpt4 key购买 nike

我有以下脚本:

#!/usr/bin/env python                                                           

import sys
import pyttsx

def main():
print 'running speech-text.py...'
engine = pyttsx.init()
str = "Hi..."
if len(sys.argv) > 1:
str = sys.argv[1]
engine.say(str)
engine.runAndWait()

if __name__ == '__main__':
main()

我把它放在/usr/bin/speech-test.py

我还给它授予了 root 的可执行权限和所有权:

sudo chown root:root /usr/bin/speech-test.py
sudo chmod 4755 /usr/bin/speech-test.py

但是,只有当我以 sudo speec-test.py 运行时,此脚本才能正确运行。如果我尝试将它作为 speech-test.py 运行,它会提示找不到一堆 ALSA lib 文件。

我是否缺少让我的脚本以 root 权限运行的东西?

最佳答案

所以您希望脚本以 root 身份运行,即使没有 sudo?为此,您需要使用 sudo chmod u+s program 在脚本上设置 setuid 位。但是,出于安全原因,大多数 Unix 发行版仅允许对二进制文件执行此操作,而不允许对脚本执行此操作。一般来说,这样做确实不是一个好主意。

如果您想以 root 身份运行此脚本,则必须以 sudo 身份运行。或者,您必须创建一个运行脚本的二进制文件,以便您可以在此二进制包装器上设置 setuid 位。这related question解释更多。

检查有效的 uid 也是一个好主意,如果不是 root,则停止运行。为此,将其添加到顶部附近(感谢 @efirvida 的提示!)

if not os.geteuid() == 0:
sys.exit("\nOnly root can run this script\n")

原始答案

也许您的用户和 root 使用不同版本的 python,具有不同的 python 路径和不同的库集。

试试这个:

command -v python
sudo command -v python

如果这两个命令没有给出相同的结果,那么您要么需要更改用户的设置以使用相同版本的 python(具有 ALSA 库的版本),要么在脚本的第一行硬编码 python 版本。

也可以尝试在脚本中添加 print sys.path 行,然后使用您的用户和 sudo 运行并进行比较。可能你会得到不同的结果。您可能需要调整用户的 PYTHONPATH 变量。

应该没有必要让脚本的所有者成为 root,并使用 sudo 运行它。您只需要正确配置 pythonPYTHONPATH

关于python - 以 root 身份运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22574201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com