moe*_*sef 5 python shell alsa root
我有以下脚本:
#!/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()
Run Code Online (Sandbox Code Playgroud)
而且我把它放进去了 /usr/bin/speech-test.py
我还给root了它的可执行权限和所有权:
sudo chown root:root /usr/bin/speech-test.py
sudo chmod 4755 /usr/bin/speech-test.py
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行,此脚本将只能正确运行sudo speec-test.py.如果我试图运行它只是speech-test.py它抱怨没有找到一堆ALSA lib文件.
我错过了让我的脚本以root权限运行的东西吗?
Sto*_*ica 10
所以你希望脚本运行root,即使没有sudo?为此,您需要在脚本上设置setuid位sudo chmod u+s program.但是,出于安全原因,大多数Unix发行版仅允许二进制文件,而不允许脚本.一般来说,这样做真的不是一个好主意.
如果要以root身份运行此脚本,则必须以as身份运行sudo.或者,您必须创建一个运行脚本的二进制文件,以便您可以在此二进制包装器上设置setuid位.这个相关问题解释得更多.
检查有效的uid也是一个好主意,如果它不是root,那么就停止运行.为此,将其添加到顶部附近(感谢@efirvida提示!)
if not os.geteuid() == 0:
sys.exit("\nOnly root can run this script\n")
Run Code Online (Sandbox Code Playgroud)
原始答案
也许你的用户和root使用不同版本的python,不同的python路径和不同的库集.
试试这个:
command -v python
sudo command -v python
Run Code Online (Sandbox Code Playgroud)
如果这两个命令没有给出相同的结果,那么您需要更改用户的设置以使用相同版本python(具有ALSA库的那个),或者将python版本硬编码为脚本的第一行.
还可以尝试print sys.path在脚本中添加一行,并与您的用户一起运行并使用sudo和比较.可能你会得到不同的结果.您可能需要调整PYTHONPATH用户的变量.
没有必要使脚本的所有者root,并运行它sudo.你只需要配置python和PYTHONPATH正确.
| 归档时间: |
|
| 查看次数: |
36338 次 |
| 最近记录: |