Запуск скрипта Python из терминала без расширения .py

14

Я хочу вызвать скрипт python script.py из терминала, просто набрав скрипт . Это возможно? Если так, то как?

Я знаю, что могу избежать ввода python script.py , добавив #! / Usr / bin / env python в начало скрипта, но мне все равно нужно добавить суффикс .py , чтобы запустить скрипт.

jmau5
источник

Ответы:

21

Файловые системы Unix / Linux не полагаются на расширения, как в Windows. Вам не нужно иметь .pyв конце файла, чтобы запустить его.

Вы можете запустить файл, вызвав его с помощью интерпретатора:

python ScriptFile

Или пометив его исполняемым и определив интерпретатор в первой строке (например #!/usr/bin/python).

Если вы не можете выполнить файл с:

/Path/to/ScriptFile

проверьте разрешения с

ls -l ScriptFile

Вам может понадобиться добавить исполняемый флаг, и chmodон будет выполняться для вас.

Если вы регулярно используете пользовательские сценарии, вы можете убедиться, что каталог, в котором вы их храните, добавлен в PATHпеременную окружения.

Патрик
источник
1
Файл находится в ~ / workspace / python. Я добавил ~ / workspace / python в свой путь, запустил sudo chmod a + x script.py "и добавил строку shebang (#! / Usr / bin / env python) в начало скрипта Я могу запустить скрипт, набрав * script.py , но просто набрать скрипт не получится
jmau5
2
В unix / linux все является файлом и соответствует его имени. Вы не можете вызвать Script.py как скрипт. Попробуйте переименовать файл из script.py в script, и это должно исправить вашу проблему.
Патрик
Извините, я неправильно понял! Все решено, спасибо!
jmau5
5

.pyРасширение является необходимым для запуска сценария. Вам нужно только сделать исполняемый скрипт (например, запустив chmod a+x script) и добавить строку shebang ( #!/usr/bin/env python).

Даниэль Куллманн
источник
Смотрите мой комментарий к ответу Патрика.
jmau5
4

В качестве опции вы можете создать оболочку для вашего скрипта ( .pyфайла):

Например, у вас есть скрипт, runme.pyчтобы вы могли создать новый файл runmeдля переноса скрипта:

#!/usr/bin/env python
import runme

а затем вызвать runme.pyфункциональность, просто вызвав runmeв оболочке.

Это полезно для мультиплатформенных сценариев, потому что на платформе Windows , вы можете назначить .pyфайлы , которые будут вызываться только по имени без расширения и притона в заголовке, но на платформе Linux вы не можете , и , таким образом , оболочка выходит.

ладья
источник