Как сделать исполняемый файл для использования в оболочке - Python

1

У меня есть скрипт Python, и мне было интересно, как я могу сделать его исполняемым; другими словами, как я могу запустить его, используя оболочку типа bash.

Я знаю, что первое, что нужно делать на первой строке #!/usr/bin/env python #!/usr/bin/env python но тогда мне нужно, например, функции, которые должны быть в определенном порядке (т.е. основной в верхней или нижней части). Что еще мне нужно, чтобы сохранить расширение.py для моего файла python (могу ли я просто вызвать функцию Dosomething?).

Короче говоря, не могли бы вы предоставить простое руководство, важные моменты, которые кто-то должен учитывать, чтобы сделать исполняемый файл на Python?

Теги:
executable

7 ответов

3
Лучший ответ

Вот как я делаю исполняемый скрипт. Это не учитывает eggs или что-то в этом роде. Это просто простой сценарий, который я хочу выполнить. Я предполагаю, что вы используете Linux.

#! /usr/bin/env python
import sys


def main():
    #
    # Do something ... Whatever processing you need to do, make it happen here.
    # Don't shove everything into main, break it up into testable functions!
    #
    # Whatever this function returns, is what the exit code of the interpreter,
    # i.e. your script, will be.  Because main is called by sys.exit(), it will
    # behave differently depending on what you return.
    # 
    # So, if you return None, 0 is returned.  If you return integer, that 
    # return code is used.  Anything else is printed to the console and 1 (error) 
    # is returned.
    #
    if an_error_occurred:
        return 'I\'m returning a string, it will be printed and 1 returned'

    # Otherwise 0, success is returned.
    return 0

# This is true if the script is run by the interpreter, not imported by another
# module.
if __name__ == '__main__':
    # main should return 0 for success, something else (usually 1) for error.
    sys.exit(main())

Теперь, если вы правильно настроили разрешения, вы можете выполнить этот скрипт.

Одна вещь, которую нужно понять, - это то, как обрабатывается ваш сценарий, каждая строка выполняется в интерпретаторе. Это верно, независимо от того, как процессор "получает". Это импорт скрипта в качестве модуля и выполнение его как сценария, по сути, работают одинаково, поскольку оба они выполняют каждую строку модуля.

Как только вы поймете, что ваш скрипт просто выполняется по мере его запуска, вы понимаете, что порядок функций не имеет значения. Объявление функции - это объявление функции. Это когда вы вызываете функцию, которая имеет значение.

Итак, в общем, макет вашего скрипта выглядит так

def func1():
    pass
def func2():
    pass
def main():
    return 0

if __name__ == '__main__':
    sys.exit(main())

Сначала вы создаете функции, которые хотите использовать, затем вы их используете. Надеюсь, поможет.

  • 0
    Кровавый ад! Это то, о чем я говорю! Спасибо большое, Хайме, отличные вещи, отличное объяснение! Это работает так! Ура, приятель!
0

Вы должны добавить sha bang, как вы описали, например

#!/usr/bin/python

или

#!/usr/bin/env python

как первая строка в вашем файле, и вам нужно сделать ее исполняемой, выполнив

chmod +x Dosomething

Вам не нужно ничего делать, в частности, имя файла может быть любым, включая Dosomething. Вероятно, ваш PATH не содержит каталог, в котором находится файл, поэтому вы должны запускать его следующим образом (если ваш текущий рабочий каталог находится там, где находится файл):

./Dosomething
  • 0
    Используя #! /usr/bin/env python более гибок в тех случаях, когда python установлен не в /usr/bin а в каком-то другом каталоге.
  • 0
    На самом деле. Спасибо, Лыча!
0

Единственное, что вы сказали, это включить:

#! /bin/env python

на первой линии. И даже не обязательно, но рекомендуется. После этого вы можете просто называть это письмом:

python [filename].py

в терминале или в файле bash.

0

Вы также должны будете предоставить ему права выполнения:

chmod u+x yourfile.py
0
  1. Место #!/usr/bin/python в первой строке
  2. Вы можете назвать свой скрипт python чем угодно, например: myPythonScript (Нет, вам не нужно поддерживать расширение.py)
  3. chmod +x myPythonScript
  4. Запустите его: ./myPythonScript

Пример: myPythonScript

#!/usr/bin/python
print "hello, world!"
0

Ваш код должен соответствовать шаблону

# any functions I want to define, and will be accessible when imported as module  
# or run from command line
...

if __name__ == '__main__':
    # things I want to do only when I run it from the command line
    ...  

Если вы хотите иметь возможность запускать его без использования python fileName.py а просто ./fileName.py вам нужно сделать первую строку вашего файла

#!/usr/bin/env python

И сделать файл исполняемым пользователем как минимум

chmod u+x fileName.py

Если вы не добавите расширение.py в свой файл, оно все равно будет запущено из командной строки... но не будет импортироваться другими модулями.

  • 0
    @eddieantonio Итак, мой файл, конечно, исполняемый, первая строка - «#! / usr / bin / env python», но ничего не происходит (он работает из оболочки python). использование if name == ' main ': def main () выдает мне ошибку (в основном я должен определить main). Нужно ли организовывать скрипт с главной функцией вверху?
0

Удалите первое пространство. То есть,

#!/usr/bin/env python

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

chmod u+x your_script.py

Скрипты Python выполняются в последовательном порядке. Если у вас есть файл, заполненный функциями, обычной практикой является то, что похоже на это в самом конце вашего файла:

if __name__ == '__main__':
    main()

Где main() запускает выполнение вашего скрипта. Причина, по которой мы делаем это так, вместо простого вызова main(), заключается в том, что это позволяет сделать ваш скрипт как модуль без каких-либо изменений; если бы у вас была только одна строка с именем main(), ваш модуль выполнил бы скрипт main. Оператор if просто проверяет, работает ли ваш скрипт в пространстве имен __main__, т.е. Работает как скрипт.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню