【问题标题】:Permission Denied when executing python file in linux在linux中执行python文件时权限被拒绝
【发布时间】:2015-10-02 02:59:47
【问题描述】:

我正在使用我的 Raspberry Pi 2 B+,并且我正在使用 Raspbian。我有一个 python 脚本位于/home/pi/Desktop/control/gpio.py

当我在命令行中输入/home/pi/Desktop/control/gpio.py 时,我会收到消息

bash: /home/pi/Desktop/control/gpio.py Permission denied

我也曾尝试在运行该命令之前运行sudo -s,但这不起作用。我的 python 脚本正在使用 Rpi.GPIO 库。

如果有人可以解释为什么我会收到此错误,我们将不胜感激!

【问题讨论】:

  • 以root身份登录,或者尝试重命名您的目录或文件..这是ithink的文件权限

标签: python linux raspberry-pi


【解决方案1】:

您将收到此错误,因为您没有文件的execute 权限。解决方法有两种:

  1. 首先不执行文件。通过运行python gpio.py,python会通过读取文件来加载文件,所以你不需要有执行权限。
  2. 授予自己执行权限。您可以通过运行 chmod u+x yourfile.py 来做到这一点。

    但是,除非您在 python 程序的顶部添加shebang,否则这样做是行不通的。它会让你的 linux 知道它应该启动哪个解释器。例如:

    #!/usr/bin/env python
    

    这将尝试使用您当前的$PATH 设置运行python。如果你知道你想要哪个 python,就把它放在这里。

    #!/usr/bin/python3
    

    记住 shebang 必须是程序的第一行。

【讨论】:

  • 就是这样。令人惊讶的是,作为root,我没有被授予系统中每个文件的权限,哈哈哈。
  • @FaithReaper> 对于文件,只要未设置 suid/sgid 位,执行位比实际访问控制更方便。实际上,您可以通过将程序传递给ld.so 来运行只有读取权限的程序。例如在我的系统上:/lib64/ld-linux-x86-64.so.2 /bin/ls 运行 ls,无论其执行位如何。最坏的情况是,如果您可以读取二进制文件,则始终可以复制它并在副本上设置执行位。所以……一旦你把它当作方便,那么这只是让root也使用这种方便。
【解决方案2】:

这样做可能会奏效:

cd /home/pi/Desktop/control/  
python gpio.py  

因为gpio.py不是一个可执行文件,你应该用pythonrun代替它

【讨论】:

  • chmod +x gpio.py 确定可以执行吗?
  • 我以前试过这个,也可能不行。它不会被视为 python 文件,并导致类似“import: command not found”的错误
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2021-11-17
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多