以 root 身份运行 python 脚本

2023-11-23

我有以下脚本:

#!/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(使用前将#替换为@)

以 root 身份运行 python 脚本 的相关文章

随机推荐

  • 如何在QEMU源代码中添加新设备?

    模拟 添加新设备的逐步方法是什么qemu使用 QOM 方法 DeviceState BusState 和其他属性可能会发生哪些变化以及在哪里发生变化 edu树内教育 PCI 设备 https github com qemu qemu blo
  • ASP.NET MVC 注定要取代 Webforms 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我发现了这些问题 但其中有
  • Numpy:如何检查数组是否包含某些数字?

    例如 我有a np array 123 412 444 and b np array 123 321 我想知道是否a包含all中的元素b 有一个简单的操作吗 在这种情况下 情况并非如此 你总是可以使用一组 gt gt gt a numpy
  • AddOAuth linkedin dotnet core 2.0

    我正在使用 dotnet core 我想在网站上设置 LinkedIn 身份验证 因为 LinkedIn 没有像 facebook google 和 twitter 这样的默认身份验证构建器 我决定使用通用实现 如下所示 services
  • 时间:2019-03-17 标签:c#networklogin

    如何在 C 中以编程方式执行网络登录 例如访问共享驱动程序 可以通过尝试通过资源管理器打开共享或通过 net use shell 命令来实现相同的目的 P Invoke 调用WNetAddConnection2会成功的 看here了解更多信
  • NetBeans - “sun-resources.xml”与“glassfish-resources.xml”

    您知道 Netbeans 如何决定应用程序范围的资源使用哪个文件名 sun resources xml or glassfish resources xml 该名称是可配置的还是硬编码的 据我了解 GlassFish 支持sun resou
  • 在 WebGL 着色器中获取准确的整数模

    我想获得精确的模数x and y在 WebGL 片段着色器中 x and y是整数 Graphing mod x y we get the following 用于生成红黑矩形的实际代码是 gl FragColor vec4 mod flo
  • 将鼠标悬停在对象上时获取对象的“原始”(非悬停)背景颜色

    我可以使用以下函数获取任何元素的背景颜色 example css background 然而 就我而言 鼠标移动到该元素上时 由于 CSS 我收到了修改后的颜色 hover伪类 有什么办法可以得到原色吗 就像是 example cssWit
  • 多行编辑文本,其中部分不可编辑,例如填空

    我需要一个包含 textview 和 edittext 的视图 例子 Yay you made it to We should hang out feel to follow me 上面的 可以是任意长度 并且最后应该感觉像一个段落 上面给
  • 如何加入 TransactionScope?

    简洁版本 我如何加入正在进行的交易范围 长版 如果您使用交易范围 您可以创建一个 周围的 交易 using TransactionScope scope new TransactionScope stuff happens then you
  • 获取屏幕比例

    我们可以获得屏幕的分辨率和内容Screen班级 所以 我们应该使用Screen WorkingArea Width and Screen WorkingArea Height 如果我们想在屏幕中央放置一些东西 但是 在 Windows 8
  • read() 和 fread() 有什么区别?

    我正在阅读linux工具的源代码坏块 他们使用read 在那里发挥作用 和标准C有区别吗fread 功能 我没有将参数视为差异 read 是低级 无缓冲的读取 它在 UNIX 上进行直接系统调用 fread 是 C 库的一部分 并提供缓冲读
  • Paypal 快速结账优惠券代码

    我在我的网站上使用 Paypal Express Checkout 系统 但我想放一个优惠券 折扣 代码区域 如果代码为真 则会减少 如 GoDaddy com 的购物车系统 您知道我应该从哪里开始吗 我没有使用任何电子商务框架 我知道这是
  • 使用自定义分隔符通过 Spring Boot 生成 DDL

    我想使用 spring boot v1 4 3 和 JPA Hibernate 5 0 11 生成创建和删除 ddl 脚本 我发现的大多数答案都使用javax persistence schema generation特性 例如 https
  • 数据框中每行的最小值

    我尝试计算多列的最小值 按行min 在数据框中 但是min函数自动返回每列整体的最小值 而不是单独返回每行的最小值 我确定我在这里错过了一些非常简单的东西 任何想法都非常感激 x lt c 1 2 7 y lt c 1 5 4 minIwa
  • 在 Android 中添加具有正确格式的项目符号

    我想在 Android 文本中显示项目符号 我已经成功添加它们了 我在网上搜索发现可以添加项目符号 但是如果文本超过一行 它就不会像 html 列表那样遵循正确的间距 请参阅下面的屏幕截图 我使用以下代码来添加项目符号 String lon
  • 如何从虚拟键代码转换为 System.Windows.Forms.Keys

    如果我使用 win32 调用拦截按键操作 我现在就有了一个按键代码 有没有办法将其转换为 System Windows Forms Keys 值 Use KeyInterop KeyFromVirtualKey
  • go lang 中 amqp.Dial 线程安全时是否每次都创建连接

    正如 RabbitMQ 文档中提到的 tcp 连接的建立成本很高 因此 引入了通道的概念 现在我遇到了这个example 在里面main 每次发布消息时它都会创建连接 conn err amqp Dial amqp guest guest
  • 为什么使用 uImage 而不是 zImage

    我正在尝试了解 zImage 和 uImage 之间的区别 以我的理解uImage是通过运行得到的mkimage on the Image结果它添加了一个 U Boot 包装器 我不知道它到底包含什么 其中包含header加上加载地址和入口
  • 以 root 身份运行 python 脚本

    我有以下脚本 usr bin env python import sys import pyttsx def main print running