gpt4 book ai didi

python - python virtualenv中的sudo权限

转载 作者:行者123 更新时间:2023-12-04 18:56:58 25 4
gpt4 key购买 nike

环境

  • Windows Subsystem for Linux与 GPS 的串行通信。
  • Adafruit GPS 连接到连接到 COM10 的 Arduino Nano .在 Windows Subsystem for Linux这相当于 /dev/ttyS10
  • 要求:pyserial

  • 我编写了一个简单的脚本来从 GPS 模块读取信息:
    import serial

    def select_sentence():
    """ This function sends serial data to the GPS module to display only GPGGA and GPRMC"""

    def read_gps():
    ser = serial.Serial("/dev/ttyS10", 9600)
    while True:
    print(ser.readline().decode('utf-8'))

    if __name__ == "__main__":
    select_sentence()
    read_gps()

    在 virtualenv 中我选择了 Python3当我执行它时,我得到了 Permission Error用于串口 /ttyS10所以我选择了 sudo chmod 666 /dev/ttyS10使用 virtualenv 中的脚本.

    但是,是否有上述 chmod /dev/serial 的替代方法?为了避免 PermissionErrors ?

    我知道即使在 virtualenv当一个人使用 sudo不考虑安装在 virtualenv 中的软件包,而是 sudo 查找您的全局 pip包。

    最佳答案

    当你激活一个 virtualenv(通过 source venv/bin/activate 或类似的),它基本上只是告诉你的 shell:“嘿,当你搜索一个命令时,在你查看其他任何地方之前先查看 venv/bin”,通过更新 $PATH环境变量。这样,当你运行像 python 这样的命令时,您的 shell 会看到并运行 pythonvenv/bin而不是在 /usr/bin或任何地方。该 Python 副本配置为查看 venv/lib用于包裹而不是 /usr/lib ,因此您可以使用 virtualenv 中的包,而不是全局安装的包。

    但是,当您使用 sudo 运行程序时, 它ignores $PATH .为什么这样做?因为在 *nix 的历史时期,设置 sudo 是很常见的,这样用户只能使用它执行特定的命令,比如(比如说)sudo iftop 1,这样任何人都可以检查网络正在用于什么,但仍然没有人可以运行sudo rm -rf /* .如果 sudo 尊重用户的 $PATH , 你可以复制 /bin/rm~/bin/iftop , 添加 ~/bin给您的$PATH ,然后运行 ​​sudo iftop – 但您实际上会运行 rm作为根!

    所以,sudo 忽略 $PATH默认情况下。但是您仍然可以通过为 sudo 提供程序的完整路径来执行特定程序,因此您可以通过运行类似 sudo ./venv/bin/python 的东西以 root 身份在您的 virtualenv 中执行 Python。 (假设您的 virtualenv 被称为 venv )。这将使您成为 root,同时仍然可以访问 virtualenv 中的包,例如 pyserial。

    1:我实际上不知道会这样设置任何命令,这是一个不好的例子,对不起。

    关于python - python virtualenv中的sudo权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335676/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com