У меня есть скрипт Python, и мне было интересно, как я могу сделать его исполняемым; другими словами, как я могу запустить его, используя оболочку типа bash.
Я знаю, что первое, что нужно делать на первой строке #!/usr/bin/env python
#!/usr/bin/env python
но тогда мне нужно, например, функции, которые должны быть в определенном порядке (т.е. основной в верхней или нижней части). Что еще мне нужно, чтобы сохранить расширение.py для моего файла python (могу ли я просто вызвать функцию Dosomething
?).
Короче говоря, не могли бы вы предоставить простое руководство, важные моменты, которые кто-то должен учитывать, чтобы сделать исполняемый файл на Python?
Вот как я делаю исполняемый скрипт. Это не учитывает 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())
Сначала вы создаете функции, которые хотите использовать, затем вы их используете. Надеюсь, поможет.
Вы должны добавить sha bang, как вы описали, например
#!/usr/bin/python
или
#!/usr/bin/env python
как первая строка в вашем файле, и вам нужно сделать ее исполняемой, выполнив
chmod +x Dosomething
Вам не нужно ничего делать, в частности, имя файла может быть любым, включая Dosomething
. Вероятно, ваш PATH
не содержит каталог, в котором находится файл, поэтому вы должны запускать его следующим образом (если ваш текущий рабочий каталог находится там, где находится файл):
./Dosomething
#! /usr/bin/env python
более гибок в тех случаях, когда python установлен не в /usr/bin
а в каком-то другом каталоге.
Единственное, что вы сказали, это включить:
#! /bin/env python
на первой линии. И даже не обязательно, но рекомендуется. После этого вы можете просто называть это письмом:
python [filename].py
в терминале или в файле bash.
Вы также должны будете предоставить ему права выполнения:
chmod u+x yourfile.py
#!/usr/bin/python
в первой строкеmyPythonScript
(Нет, вам не нужно поддерживать расширение.py)chmod +x myPythonScript
./myPythonScript
Пример: myPythonScript
#!/usr/bin/python
print "hello, world!"
Ваш код должен соответствовать шаблону
# 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 в свой файл, оно все равно будет запущено из командной строки... но не будет импортироваться другими модулями.
Удалите первое пространство. То есть,
#!/usr/bin/env python
Должна быть самая первая строка вашего файла. Затем убедитесь, что вы установили разрешения для исполняемого файла:
chmod u+x your_script.py
Скрипты Python выполняются в последовательном порядке. Если у вас есть файл, заполненный функциями, обычной практикой является то, что похоже на это в самом конце вашего файла:
if __name__ == '__main__':
main()
Где main() запускает выполнение вашего скрипта. Причина, по которой мы делаем это так, вместо простого вызова main(), заключается в том, что это позволяет сделать ваш скрипт как модуль без каких-либо изменений; если бы у вас была только одна строка с именем main(), ваш модуль выполнил бы скрипт main. Оператор if просто проверяет, работает ли ваш скрипт в пространстве имен __main__, т.е. Работает как скрипт.