Python в терминале - PullRequest
       49

Python в терминале

2 голосов
/ 01 июля 2010

Этот вопрос касается запуска файлов 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.

Я часами пытался разобраться, любая помощь приветствуется.

Paul.

Ответы [ 7 ]

8 голосов
/ 01 июля 2010

Включение каталога, в котором находится команда в вашем $ 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).

3 голосов
/ 01 июля 2010

Возможно, вы уже пробовали это раньше, но однажды я столкнулся с подобными проблемами, и этот процесс мне подходит.В каталоге, где хранится recap.py:

chmod +x recap.py
./recap.py

./ является ключевой частью, поскольку он работает как полный путь к каталогу.Это также предполагает, что у вас есть

#!/usr/bin/env python

или что-то похожее в первой строке вашей программы.Первые две буквы первой строки называются shebang и указывают, что файл представляет собой сценарий, который должен выполняться интерпретатором, указанным путем, следующим за ним.Итак, как и предполагали другие, ваш интерпретатор python может находиться где-то, кроме / usr / bin (возможно, в / bin), поэтому вам нужно найти это и включить эту строку в начало любого сценария Python, который вы хотитевыполнить из терминала.

Если вы не знаете, где находится python, вы можете использовать:

which python

в терминале, который должен напечатать путь к вашей установке python.Затем вы можете использовать этот путь после своего шебанга.

1 голос
/ 01 июля 2010

Другие респонденты хорошо поработали над вашим первоначальным вопросом, но я думаю, что вы очень хорошо бы научились использовать командную строку, поскольку ваши ответы показали, что вы еще не знакомы с ней.Я всегда рекомендую это .Это фантастическое руководство, которое поможет вам с ним удобно.

1 голос
/ 01 июля 2010

Введите:

which python 

в терминал, и это даст вам путь к python.Поместите это поверх вашего скрипта, как предлагали другие:

#! /path/to/python

Также убедитесь, что он исполняемый (весь материал chmod).Вы можете проверить это, набрав:

ls -l

Файл должен иметь что-то вроде -rwx-r - r-- рядом с ним.X означает, что это исполняемый файл.

1 голос
/ 01 июля 2010

Убедитесь, что первая строка в каждом скрипте - "#! / Usr / bin / env python" (без кавычек) Сделайте "chmod + x file.py" для каждого файла. После этого вы сможете запускать каждый скрипт как file.py.

0 голосов
/ 20 октября 2013

Я не знаю, насколько это полезно для вас сейчас, поскольку это происходит несколько лет спустя, но я боролся с очень похожей проблемой уже добрый час. Я использую Python IDLE, чтобы сохранить мой код в виде файла .py. Когда я пытался запустить его в терминале, я получал синтаксическую ошибку в первой строке. Моя первая строка кода была

#!/usr/bin/env python

но интерпретатор читал мою первую строку как описание оболочки IDLE "(Python w.7.5 (v2.75: ab05e7dd2788 ... и т. Д. И т. Д.)". Мне нужно было удалить все эти строки, включая первый >>> для того, чтобы терминал открыл мой файл. Поэтому я удалил все дерьмо, где места IDLE были его первыми строками, и вуаля! Это сработало. Вот как я заставил его работать один раз в терминале:

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

Вот и все!

0 голосов
/ 01 июля 2010

Попробуйте набрать:

which env

чтобы узнать путь env в вашей системе. Измените путь shebang, чтобы он совпадал с полным путем команды env, найденной с помощью команды which. Если это не удается. Это означает, что у вас либо не установлен env, либо env установлен по системному пути. Попробуйте указать полный путь к исполняемому файлу python вместо использования env, набрав:

which python

И, используя полный путь, вернитесь вместо шебанга / path / to / env. Первая строка вашего recap.py должна выглядеть примерно так:

#!/path/to/python
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...