以root身份运行python脚本
我有以下脚本:
#!/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程序在脚本上设置setuid位.但是,出于安全原因,大多数Unix发行版仅允许二进制文件,而不允许脚本.一般来说,这样做真的不是一个好主意.
如果要以root身份运行此脚本,则必须以sudo身份运行.或者,您必须创建一个运行脚本的二进制文件,以便您可以在此二进制包装器上设置setuid位.这个related question解释得更多. 检查有效的uid也是一个好主意,如果它不是root,那么就停止运行.为此,将其添加到顶部附近(感谢@efirvida提示!) if not os.geteuid() == 0: sys.exit("nOnly root can run this scriptn") 原始答案 也许你的用户和root使用不同版本的python,不同的python路径和不同的库集. 试试这个: which python sudo which python 如果这两个命令没有给出相同的结果,那么你需要更改用户的设置以使用相同版本的python(具有ALSA库的那个),或者将python版本硬编码为脚本的第一行. 还可以尝试在脚本中添加print sys.path行,并与您的用户一起运行并使用sudo进行比较.可能你会得到不同的结果.您可能需要调整用户的PYTHONPATH变量. 没有必要使脚本的所有者root,并使用sudo运行它.你只需要正确配置python和PYTHONPATH. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |