Как запустить программу на Python напрямую?

13

Как запустить программу на Python напрямую?

Я создал файл .py (скажем, mnik.py ) в gedit. В терминале все идет гладко.

Команда идет

python3 mnik.py

Но всякий раз, когда я нажимаю на файл, он открывается с помощью gedit. Я не могу запустить его напрямую, нажав.

Что делать?

Приядарши Павел
источник
4
@kasperd Ввод python3в командной строке с аргументом - отличный способ запуска скриптов на python. На самом деле это самый простой способ запустить программу, которая требует терминала и аргументов (как многие из моих собственных сценариев, но также и такие программы, как mercurial, sphinx). Не могли бы вы объяснить, почему то, что я делаю более 20 лет, не совсем правильно?
Anthon
3
@kasperd Правильно написанный скрипт (или программа) на Python не обязательно должен содержать строку Шебанга. Если этого не произойдет, это все еще сценарий Python во всех отношениях. Этот сценарий просто не может быть выполнен из оболочек Linux в сокращенной форме, которую вы предпочитаете. Существуют также среды, в которых скрипты Python вообще не нуждаются в строке shebang и позволяют им запускать скрипт двойным щелчком мыши.
Anthon
1
@kasperd То, что нужно ядру для запуска скрипта Python ./scriptname, не подтверждает ваше утверждение о том, что скрипт запускается из командной строки с помощью python3. Существуют разные способы запуска сценариев Python, и выполнение python3 ./mnik.pyтакже является правильным способом выполнения действий, оно просто другое (и, по крайней мере, вы получаете Python3 таким образом, а не Python2, как это более вероятно с большинством ответов)
Anthon
1
Использование <language> <script> является полностью допустимым и приемлемым способом запуска сценария. Предположение, что это плохая практика, должно быть осуждено.
Джейкоб Влейм

Ответы:

26

Там нужно две вещи.

  1. В скрипте должна быть #!строка, указывающая ОС, какой интерпретатор использовать. В вашем случае ваша самая первая строка в коде должна быть#!/usr/bin/env python3
  2. Вам нужно открыть файловый менеджер, перейти в «Правка» -> «Настройки» -> «Поведение» и выбрать, что делать с исполняемыми файлами.

    введите описание изображения здесь

    1. Наконец, убедитесь, что сам файл действительно имеет права доступа к исполняемому файлу. В терминале можно сделать chmod +x /path/to/script.pyи в GUI, щелкнуть правой кнопкой мыши по файлу и изменить его Свойства -> Разрешения

    введите описание изображения здесь

    введите описание изображения здесь

Примечание о линии Шебанга

Самая первая строка называется линией Шебанга и должна начинаться с #!; что будет дальше, так это имя интерпретатора, который будет читать ваш код. В случае, если вы используете, python3вы можете использовать либо для #!/usr/bin/python3или #!/usr/bin/env python3мобильности. Если вы не используете код, который будет специфичен для версии Python - просто используйте#!/usr/bin/env python

Обратите внимание на вывод скрипта:

Если ваш сценарий печатает вывод на консоль, он должен иметь окно терминала или, в качестве альтернативы, использовать диалоги GUI, такие как zenity. Предпочитаю использовать Run in Terminalопцию, если вы хотите увидеть код. Если вы хотите, чтобы скрипт что-то делал, не видя вывод консоли - используйте Runопцию.

введите описание изображения здесь

Кроме того, если у вас есть параметры командной строки, такие как sys.argv[1]в скрипте, вы не можете их установить, если у вас не открыто окно терминала.

Сергей Колодяжный
источник
1
@PriyadarshiPaul Это то же самое, что и Filesпрограмма на панели запуска. В Windows говорят, что будет файловым обозревателем илиMy Computer
Сергей Колодяжный
@PriyadarshiPaul это nautilusв Терминале
grooveplex
3
#!/usr/bin/env pythonвызовет Python2 в большинстве систем Ubuntu. Хотя вы можете сделать сценарий Python, написанный для Python3, совместимым с Python2, я не предполагаю, что OP это сделал. #!/usr/bin/env python3кажется более подходящим shebang
Anthon
1
И почему мы поднимаем Arch Linux здесь? Может быть, я буду выглядеть немного подло, но мы говорим об Ubuntu здесь. В Ubuntu по умолчанию python связан с python2.7. Если вы разрабатываете программное обеспечение, вы, вероятно, должны знать, какие ссылки, где, если вы используете что-то, отличное от версии по умолчанию для вашей ОС, тогда явно укажите это. Конечно, мы можем удовлетворить каждый отдельный вопрос, но для того, чтобы громко выкрикнуть - если вы кодируете, то делайте это правильно.
Сергей Колодяжный
3

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

Найдите свою установку Python

$ which python
/usr/bin/python

Добавьте расположение программ в верхнюю строку вашей программы с #!перед

#!/usr/bin/python

# Python code goes here....

Установите скрипт Python, чтобы иметь права на выполнение

$ chmod 700 test.py

Теперь вы можете запустить скрипт напрямую

$ ./test.py

Листинг кода для test.py

#!/usr/bin/python

print "test"
Джозеф
источник
2

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

Первое, что вы можете сделать, запустив

 chmod +x mnik.py

второе вы можете сделать, добавив в качестве первой строки скрипта строку shebang, которая вызывает python3 . На всех системах Ubuntu, с которыми я работал, которые поставлялись с python3, вы можете получить python3, добавив эту строку вверху:

#!/usr/bin/env python3

После этих двух изменений вы можете набрать /path/to/mnik.py, ./mnik.pyили просто mnik.py(последнее требует, чтобы скрипт был в вашей переменной PATH).

Если вы сделаете эти изменения, вы также можете рассмотреть возможность переименования mnik.pyв mnik, что является обычной практикой для пакетов Python с командами, которые публикуются в PyPI.

Энтон
источник
хорошо, ни одно из этого сейчас не работает
Priyadarshi Paul
Что ладно"? Что означает «это»?
Anthon
Там говорится ** usr / bin / env: плохой интерпретатор: нет такого файла или каталога **
Priyadarshi Paul
Там есть, по крайней мере, /пропавший там фронт. Пожалуйста, объясните, что "Это" в вашем комментарии. Это оболочка Bash? Это Windows Command.com? Из чего вы вызываете программу и с каким синтаксисом командной строки?
Anthon