终端中的Python
这个问题是关于在终端运行不在主目录下的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。
我已经花了好几个小时在解决这个问题,任何帮助都非常感谢。
保罗。
7 个回答
在终端里输入:
which python
这样可以找到你的python路径。把这个路径放在你的脚本最上面,就像其他人建议的那样:
#! /path/to/python
另外,要确保这个文件是可执行的(就是那些chmod的操作)。你可以通过输入以下命令来检查:
ls -l
这个文件旁边应该会显示类似于 -rwx-r--r-- 的内容。这里的x表示这个文件是可执行的。
你可能之前试过这个,但我在某个时候也遇到过类似的问题,这个方法对我有效。在存放recap.py的文件夹里:
chmod +x recap.py
./recap.py
这里的 ./ 是关键部分,它表示当前目录的完整路径。这还假设你在程序的第一行有
#!/usr/bin/env python
或者类似的内容。第一行的前两个字符被称为 shebang,它告诉系统这个文件是一个脚本,应该由后面指定的解释器来执行。所以,正如其他人所建议的,你的python解释器可能不在 /usr/bin 这个位置(可能在 /bin),所以你需要找到它,并在任何你想从终端执行的python脚本的顶部加上这一行。
如果你不知道python在哪里,可以在终端输入:
which python
这条命令会显示你python安装的路径。然后你可以在shebang后面使用这个路径。
把一个命令所在的目录加到你的 $PATH 里,这样你就可以在任何地方运行这个目录里的命令了。不过在你第一个例子中,你是用 "python" 命令来运行 recap.py 文件。所以你的命令行并不会去 $PATH 里找 recap.py 的位置。要让 recap.py 文件可以直接作为命令运行,你可以看看这个:
http://en.wikipedia.org/wiki/Shebang_(Unix)
简单来说,你需要在文件的第一行加上 #!/usr/bin/env python
,然后用 chmod 命令把这个文件设置为可执行的(也就是运行 chmod u+x recap.py
)。