Як запустити програму Python безпосередньо?


13

Як запустити програму Python безпосередньо?

Я створив файл .py (скажімо, mnik.py ) в gedit. Він працює безперебійно в терміналі.

Команда йде

python3 mnik.py

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

Що робити?



4
@kasperd Введення python3командного рядка з аргументом - відмінний спосіб запустити сценарії python. Це насправді найпростіший спосіб запустити програму , яка вимагає терміналу і аргументів (як і багато хто з моїх власних сценаріїв, але і такі програми , як mercurial, sphinx). Хочете пояснити, чому те, що я роблю протягом 20+ років, не є правильним способом?
Антон

3
@kasperd Правильний написаний сценарій Python (або програма) не повинен мати рядка shebang. Якщо це не так, це все-таки сценарій Python в усіх відношеннях. Цей скрипт просто не може бути виконаний з оболонок Linux у стислій формі, яку, здається, ви хочете. Є також середовища, які не вимагають, щоб сценарії Python взагалі мали рядок shebang і дозволяють їм запускати сценарій подвійним клацанням миші.
Антон

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і в графічному інтерфейсі, клацніть правою кнопкою миші на файл і змінити його Властивості -> Дозволи

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

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

Зауважте про лінію shebang

Перший рядок називається лінією shebang і повинен починатися з #!; що далі буде - це ім'я перекладача, який прочитає ваш код. Якщо ви користуєтесь, 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-говоріть, що це файл explorer абоMy Computer
Сергій Колодяжний

@PriyadarshiPaul це nautilusв Терміналі
grooveplex


3
#!/usr/bin/env pythonбуде викликати Python2 у більшості систем Ubuntu. Хоча ви можете зробити сценарій Python, написаний для Python3, сумісний з Python2, я не вважаю, що ОП це зробила. #!/usr/bin/env python3здається більш підходящим шебанг
Антон

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

Що таке "нормально"? На що посилаються "ці"?
Антон

Це говорить ** usr / bin / env: поганий перекладач: Немає такого файлу чи каталогу **
Priyadarshi Paul

Там щонайменше /відсутній спереду. Поясніть, будь ласка, що у вашому коментарі "Це"? Це башмак? Це Windows Command.com? З чого ви викликаєте програму та з яким синтаксисом командного рядка?
Антон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.