Как сделать исполняемый файл для использования в оболочке - Python - PullRequest
1 голос
/ 10 ноября 2011

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

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

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

Ответы [ 7 ]

4 голосов
/ 10 ноября 2011

Вот так я делаю исполняемый скрипт.Это не учитывает 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 голосов
/ 10 ноября 2011
  1. Поместите #!/usr/bin/python в первую строку
  2. Вы можете назвать свой скрипт Python как угодно, например: myPythonScript (Нет, вам не нужно сохранять расширение .py)
  3. chmod +x myPythonScript
  4. Запустите его: ./myPythonScript

Пример: myPythonScript

#!/usr/bin/python
print "hello, world!"
0 голосов
/ 10 ноября 2011

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

# 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 голосов
/ 10 ноября 2011

Вам нужно добавить Ша Бэнг , как вы описали, например,

#!/usr/bin/python

или

#!/usr/bin/env python

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

chmod +x Dosomething

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

./Dosomething
0 голосов
/ 10 ноября 2011

Удалить первый пробел.То есть

#!/usr/bin/env python

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

chmod u+x your_script.py

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

if __name__ == '__main__':
    main()

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

0 голосов
/ 10 ноября 2011

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

chmod u+x yourfile.py
0 голосов
/ 10 ноября 2011

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

#! /bin/env python

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

python [filename].py

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

...