【问题标题】:how to run chmod in python?如何在 python 中运行 chmod?
【发布时间】:2019-08-05 23:23:23
【问题描述】:

我正在使用一个名为 Rplidar 的传感器。要将 Rplidar 连接到我的操作系统(Ubuntu),有时我必须在终端中使用此命令:

sudo chmod 666 /dev/ttyUSB0  

运行这条指令后,ubuntu可以检测到Rplidar。稍后,我将运行一个 python 脚本来使用 Rplidar。现在我想在我的 python 脚本中包含这个命令,这样在使用 Rplidar 之前我不需要在终端中运行它。有什么办法可以在 python 脚本中做到这一点?

【问题讨论】:

  • os.system("sudo chmod 666 /dev/ttyUSB0") 但我不确定如果系统要求输入密码会怎样。
  • 或 subprocess.run("sudo chmod 666 /dev/ttyUSB0")
  • os.system("echo password | sudo -S chmod 666 /dev/ttyUSB0") ?
  • 您应该修复对设备节点的访问,而不是运行chmod。在大多数情况下,您只需将用户放入一个组(拥有该节点的那个),然后注销并重新登录。如果失败,您应该编写一个 udev 规则。

标签: python chmod


【解决方案1】:

简单的答案是chmod在Python的os模块中提供:

所以你需要做的就是运行:

import os
filename = 'example.dat'
os.chmod(filename,
    stat.S_IRUSR |
    stat.S_IWUSR |
    stat.S_IRGRP |
    stat.S_IWGRP |
    stat.S_IROTH)

因此无需掏腰包即可正常执行此操作。还可以查看 os.pathshutil 模块,以获得在该领域的更多支持。

如果您需要以提升的权限执行此操作,事情会变得有点复杂,但这实际上不是这里的解决方案。

此外,将 666 权限授予系统设备也不是一个好主意。当系统上的任何用户对系统设备具有读/写访问权限时,这可能会引发安全问题。原则上,使用正确操作所需的最少权限。

作为@KlausD。 cmets,无论如何,您都不应该在这些设备节点上强制更改权限。正确的方法是执行一次性操作,将相关用户添加到系统上的dialout 组。然后,通过在正确的组中,运行您的应用程序的用户将有权访问该设备。这已经在这里回答了:

只需运行一次:

sudo adduser kazi dialout

然后注销并重新登录以使其生效。您的 Rplidar 应用程序将运行良好。

【讨论】:

    【解决方案2】:

    您可以使用subprocess 库在 Python 中运行 shell 命令

    import subprocess
    subprocess.Popen(["sudo", "chmod", "666", "/dev/ttyUSB0"], stdout=subprocess.PIPE, shell=True)
    

    【讨论】:

    • 如何提供密码? @VietHTran
    • @Kazi 您可以尝试与上面的@furas 建议类似的方法,方法是将上面的Popen 行替换为subprocess.Popen("echo '<password>' | sudo -S chmod 666 /dev/ttyUSB0", stdout=subprocess.PIPE, shell=True)
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2015-02-13
    • 2021-07-05
    • 2014-09-15
    • 2017-02-05
    • 2012-09-29
    相关资源
    最近更新 更多