我有以下脚本:
#!/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
?为此,您需要设置设置用户ID位在脚本上sudo chmod u+s program
。然而,出于安全原因,大多数 Unix 发行版仅允许对二进制文件执行此操作,而不允许对脚本执行此操作。一般来说,这样做确实不是一个好主意。
如果您想以 root 身份运行此脚本,则必须以sudo
。或者,您必须创建一个运行脚本的二进制文件,以便您可以在此二进制包装器上设置 setuid 位。这相关问题解释更多。
检查有效的 uid 也是一个好主意,如果不是 root 则停止运行。为此,请将其添加到顶部附近(谢谢@efivida给小费!)
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
。您只需要配置python
and PYTHONPATH
正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)