【问题标题】:Python in terminal终端中的 Python
【发布时间】:2010-07-01 13:37:18
【问题描述】:

这个问题涉及在终端中运行未存储在主目录中的 python 文件。我想我已经通过修改我的路径解决了这个难题的第一部分,以便它包含存储我的 python 程序的目录。

那么最初在哪里 echo $PATH 将产生以下结果:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

它现在产生: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/paulpatterson/Documents/Python

然而,尽管正确的文件夹现在位于我的路径中,但此文件夹中的任何 python 文件都不会运行。例如,当我打开终端并输入时,其中有一个名为 recap.py 的文件: python recap.py 我明白了:

python: can't open file 'recap.py': [Errno 2] No such file or directory

如果我只是输入recap.py(即省略“python”位),我会得到: -bash: /Users/paulpatterson/Documents/Python/recap.py: Permission denied

有人能告诉我吗?理想情况下,我想设置它,以便在终端打开后立即输入文件名,甚至不输入 python。

我花了几个小时试图解决这个问题,感谢任何帮助。

保罗。

【问题讨论】:

    标签: python macos terminal


    【解决方案1】:

    在 $PATH 中包含命令所在的目录意味着您可以从任何地方运行该目录中的命令。但是在您的第一个示例中,您正在以 recap.py 作为参数运行命令“python”。因此,您的 shell 不会搜索您的 $PATH 来查找 recap.py 所在的位置。要使 recap.py 本身作为命令运行,请参见:

    http://en.wikipedia.org/wiki/Shebang_(Unix)

    简而言之,您需要将#!/usr/bin/env python 包含在第一行中,然后将文件chmod 为可执行文件(chmod u+x recap.py)。

    【讨论】:

      【解决方案2】:

      您之前可能已经尝试过,但我曾经遇到过类似的问题,而这对我来说很有效。在recap.py所在的目录下:

      chmod +x recap.py
      ./recap.py
      

      ./ 是关键部分,因为它是目录的完整路径。这也假设您有

      #!/usr/bin/env python
      

      或类似于程序第一行的内容。第一行的前两个字符称为shebang,表示该文件是由其后路径指定的解释器执行的脚本。因此,正如其他人所建议的那样,您的 python 解释器可能位于 /usr/bin 以外的某个位置(可能在 /bin 中),因此您需要找到它,并将这一行包含在您希望的任何 python 脚本的顶部从终端执行。

      如果不知道python在哪里,可以使用:

      which python
      

      在终端,它应该打印你的 python 安装路径。然后,您可以在 shebang 之后使用该路径。

      【讨论】:

      • 嗨,很确定 python 在 /usr/bin 中。 Macbook 还不到两周,当我在终端中输入: ls -l /usr/bin 时,我得到了一大堆文件,包括 python 文件。我已经尝试了这两个建议,但仍然收到相同的错误消息:/Users/paulpatterson/Documents/Python/recap.py: line 1: #!/usr/bin/env: No such file or directory /Users/paulpatterson/Documents /Python/recap.py:第 3 行:意外标记附近的语法错误 (' /Users/paulpatterson/Documents/Python/recap.py: line 3: start_num = int(raw_input("您希望从哪个数字开始计数?"))'
      • ./recap.py 只会导致找不到文件消息
      • ./recap.py 如果您正在工作的目录中有一个名为“recap.py”的文件,则不应导致找不到文件消息。 (输入 pwd 查看您的工作目录,输入 ls 查看其内容) 要查看 /usr/bin 是否是正确的目录,应该有一个名为 'env' 的文件和一个名为 'python' 的文件。我认为在 mac 上 python 可能安装在 /usr/local/bin/python
      • 要确定 python 的安装位置,在终端中输入“which python”并在 shebang 之后使用它。
      • 检查 /usr/bin 确实有一个名为“python”的文件和一个名为“env”的文件。 'Which python' 产生'/usr/bin/python'。所以这似乎是应该的。不幸的是仍然没有骰子。我不确定我正在工作的目录是什么意思。如果我将文件放在目录“paulpatterson”中,它工作正常。我想要做的是将文件(以及所有后续的 python 文件)放在更下游的目录中,即 paulpatterson/Documents/Python。
      【解决方案3】:

      确保每个脚本的第一行是“#!/usr/bin/env python”(没有 qoutes)。对每个文件执行“chmod +x file.py”。然后,您应该能够将每个脚本作为 file.py 运行。

      【讨论】:

      • 感谢您的快速回复。已在文件顶部添加了建议的行,但是当我尝试 chmod 时,我得到: chmod: recap.py: No such file or directory 所以仍然无法运行脚本
      • 如果您运行了chmod +x file.py,那么file.py 需要在您当前的工作目录中,或者您需要指定文件的完整路径。 chmod 不会在整个文件系统中搜索随机 file.py 并对其进行 chmod。
      • @Paul Patterson,您需要更改到包含 file.py 的目录或提供 chmod 的完整路径。 “cd /Users/paulpatterson/Documents/Python/”首先,或者执行“chmod +x /Users/paulpatterson/Documents/Python/file.py”
      • 好的,我已经使用以下命令指定了完整路径:chmod u+x /Users/paulpatterson/Documents/Python/recap.py。现在找到了文件,但没有正确执行;终端显示以下内容:/Users/paulpatterson/Documents/Python/recap.py:第 1 行:#!/usr/bin/env:没有这样的文件或目录 /Users/paulpatterson/Documents/Python/recap.py:第 3 行: 意外标记附近的语法错误(' /Users/paulpatterson/Documents/Python/recap.py: line 3: start_num = int(raw_input("你希望从哪个数字开始计数?"))' 所以提示了很多错误,但是如果我从 paulpatterson 运行它,文件可以完美运行
      • @Paul Patterson,尝试用“/bin/env”替换“/user/bin/env”
      【解决方案4】:

      输入:

      which python 
      

      进入终端,这应该可以让您找到通往 python 的路径。按照其他人的建议,将其放在脚本之上:

      #! /path/to/python
      

      还要确保它是可执行的(整个 chmod 的东西)。您可以通过键入以下内容进行检查:

      ls -l
      

      该文件旁边应该有类似 -rwx-r--r-- 的内容。 x 表示它是可执行的。

      【讨论】:

      • 你可以通过#!/usr/bin/env python避免which
      • 谢谢。完成了所有这些,但仍然无法正常工作。 'which python' 给了我 /usr/bin/python,所以我放在顶部的 shebang 是 '#!/usr/bin/python',但错误信息是一样的。使用你的 ls -l 建议我得到 -rwxr-xr-x@ 1 paulpatterson staff 327 1 Jul 18:37 recap.py 所以这似乎没问题。
      【解决方案5】:

      其他回复者已经很好地解决了您最初的问题,但我认为您将非常适合实际学习如何使用命令行,因为您的回复表明您还不熟悉它。我总是推荐this。这是一个很棒的指南,可以让您轻松使用它。

      【讨论】:

      • 谢谢。你说得对,我还不熟悉。然而具有讽刺意味的是,在我尝试开始学习命令行之后,我的最初问题被提示了。我购买了以下电子书并尝试了它所教的一些东西(使用终端控制 Mac 命令行)。我也会试试你的建议。
      • 它假定 linux,所以会有一些差异,但是 OSX 仍然是一个 unix,所以它足够接近你开始,并且许多工具是相同的(虽然它使用 BSD 用户空间而不是 GNU)。您也可以在运行 linux 的 vm 或 livecd 或任何其他方法中玩耍
      【解决方案6】:

      尝试输入:

      which env
      

      找出 env 的路径在你的系统上。更改 shebang 路径以匹配使用 which 命令找到的 env 命令的完整路径。 如果那失败了。这意味着您没有安装 env 或 env 安装在系统路径中。尝试通过键入以下内容指定 python 可执行文件的完整路径,而不是使用 env:

      which python
      

      并使用完整路径返回代替 /path/to/env python shebang。 recap.py 的第一行应该是这样的:

      #!/path/to/python
      

      【讨论】:

        【解决方案7】:

        我不知道这对您现在看到的几年后的情况有多大用处,但是我已经为一个非常相似的问题苦苦挣扎了一个小时。我正在使用 Python IDLE 将我的代码保存为 .py 文件。当我试图在终端中运行它时,我一直在第一行收到语法错误。我的第一行代码是

        #!/usr/bin/env python
        

        但是解释器正在读取我的第一行作为 IDLE 的 shell 描述“(Python w.7.5 (v2.75:ab05e7dd2788...etc, etc.)”。我必须做的是删除所有这些行,包括第一个>>>,以便终端打开我的文件。所以我删除了空闲位置作为第一行的所有废话,瞧!它工作了。这是我在终端中如何让它工作的:

        cd /directory/where/you/have/your/file
        chmod +x filename.py
        python filename.py
        

        就是这样!

        【讨论】:

          猜你喜欢
          • 2018-10-16
          • 2020-07-05
          • 2015-06-08
          • 2015-06-26
          • 1970-01-01
          • 2012-11-21
          • 2013-12-16
          • 2015-09-10
          • 1970-01-01
          相关资源
          最近更新 更多