【问题标题】:Permission denied for Python script using Bash?使用 Bash 的 Python 脚本的权限被拒绝?
【发布时间】:2012-06-19 02:38:49
【问题描述】:

我是 Ubuntu 新手...我正在尝试运行我的第一个简单的 Python 程序“Hello World”... 在终端中运行以下命令后

1. chmod +x filename.py 
2. ./filename.py

终端显示以下错误“bash: ./filename.py: Permission denied” 我可以做些什么来解决问题?

【问题讨论】:

  • 你能做一个ls -l filename.py 并发布它所说的内容吗.. 我对文件权限很好奇(尽管chmod +x filename.py 将是使文件可执行的正确方法)。
  • 你的脚本第一行有#!/usr/bin/env python吗?
  • Re #!/usr/bin/env python vs #!/usr/bin/python 我被 SO 上的某个人严厉警告使用前者(我自己的所有脚本仍然这样做),因为大概你无法确定哪个 Python 会执行如果您安装了多个,因此我们的想法是始终为您想要的那个指定完整路径)。也许我应该提出这个问题并将其发布在 SO 上。
  • 使用/usr/bin/env 很好。这只是说“使用你在我的PATH 上找到的东西”的一种方式,如果你的PATH 构造合理,那就太好了。如果您要分发脚本,我会说这是首选,因为这样他们将能够使用最终用户的PATH。但是,如果您需要明确使用一个特定的 Python 二进制文件,那么可以,一定要指定它。

标签: python permissions


【解决方案1】:

你的 python 文件顶部有适当的咒语吗?例如,

#!/usr/bin/python(或#!/usr/bin/env python

澄清一下,chmod +x 只会使文件可执行,不会运行。

我假设你的脚本看起来没有比这更复杂的了:

#!/usr/bin/env python
print 'hello world'

【讨论】:

  • OP 询问的是 Python 脚本,所以 shebang 应该是:#!/usr/bin/env python。并且 OP 确实说正是这种运行方式导致了错误。
  • @ivc 你是对的.. 我会更新我的答案 - 感谢您的关注。
  • 真的非常感谢大家。@Levon 感谢您编辑我的问题 + #!/usr/bin/python + print "Hello, World!"以上是我的程序。
  • @Ammu 欢迎您。能否给我们ls -l filename.py 命令的输出,以便我们查看文件权限?
  • 嗨,Levon 终端显示以下消息 1。-rw-rw-r-- 1 owner owner 40 Jun 15 15:45 first.py
【解决方案2】:

一些可能性:

  1. 如果你输入umask,它会说什么? chmod +x 只会在您的 umask 不阻止用户可执行位的情况下为您生成可执行文件。像 0022 这样的典型 umask 不会阻塞用户执行位,但像 0122 这样的 umask 可以。 (有关详细信息,请参阅 chmod(1) 的描述部分。)

  2. 要执行诸如 Python 脚本之类的脚本,您还需要 read 权限。尝试chmod u+rx filename.py 并再次执行脚本。

  3. 您在文件开头使用“hashbang”行指定的任何解释器(例如#!/usr/bin/env python)也很可能无法执行,尽管根据我的经验,这会产生不同的错误信息。

【讨论】:

  • 您好 Zigg,1.非常感谢您的回答 2.现在可以工作了,但是 chmod -x 和 chmod u+rx 背后的问题是什么?
  • chmod -x 将删除用户、组和其他用户的执行权限,但前提是 umask 不包含这些执行位 - 请参阅linux.die.net/man/1/chmod 的 chmod 手册页以获取更多信息。 chmod u+rx 将设置用户读取和执行位,而不考虑 umask。
【解决方案3】:

我在我的新系统上处理同样的问题。

这是我第三次尝试解决这个问题,您的帖子是第一个出现在谷歌搜索结果中的帖子。我的帖子迟到了,但认为它会帮助其他有同样问题的用户。

在我的例子中,它是关于分区表设置的。

检查您的 /etc/mtab 文件是如何存储 python 脚本的。检查是否有子句:noexec

noexec 是禁止在分区下执行的标志。默认情况下,它使用 exec 设置。但是,有时会发生这种事情。

现在,这里运行良好。

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2011-08-14
    • 1970-01-01
    • 2016-07-16
    • 2014-06-18
    • 2015-11-15
    • 1970-01-01
    • 2019-05-02
    • 2016-01-15
    相关资源
    最近更新 更多