Введение
В этом разделе представляется концепция главной программы или главного модуля.
This tutorial is from open-source community. Access the source code
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом разделе представляется концепция главной программы или главного модуля.
В многих языках программирования существует концепция функции или метода main.
// c / c++
int main(int argc, char *argv[]) {
...
}
// java
class myprog {
public static void main(String args[]) {
...
}
}
Это первая функция, которая выполняется при запуске приложения.
В Python нет функции или метода main. Вместо этого есть основной модуль. Основной модуль - это исходный файл, который запускается первым.
$ python3 prog.py
...
Любой файл, который вы передаете интерпретатору при запуске, становится основным. Название не имеет значения.
__main__
Это стандартная практика для модулей, которые запускаются как основной скрипт, использовать эту конвенцию:
## prog.py
...
if __name__ == '__main__':
## Запускается как основная программа...
statements
...
Инструкции, помещенные внутри инструкции if
, становятся основной программой.
Любой файл Python может запускаться как основная программа или как импорт библиотеки:
$ python3 prog.py ## Запускается как основная программа
import prog ## Запускается как импорт библиотеки
В обоих случаях __name__
- это имя модуля. Однако, оно будет установлено в __main__
только при запуске как основной программы.
Обычно вы не хотите, чтобы инструкции, которые являются частью основной программы, выполнялись при импорте библиотеки. Поэтому в коде, который может использоваться любым способом, обычно есть проверка if
.
if __name__ == '__main__':
## Не выполняется, если загружается с помощью import...
Вот общий шаблон программы для написания программы на Python:
## prog.py
## Инструкции по импорту (библиотеки)
import modules
## Функции
def spam():
...
def blah():
...
## Основная функция
def main():
...
if __name__ == '__main__':
main()
Python часто используется для инструментов командной строки
$ python3 report.py portfolio.csv prices.csv
Это означает, что скрипты выполняются из оболочки / терминала. Общие сценарии использования - это автоматизация, задания в фоновом режиме и т.д.
Список аргументов командной строки представляет собой список текстовых строк.
$ python3 report.py portfolio.csv prices.csv
Этот список текстовых строк доступен в sys.argv
.
## В предыдущей bash-команде
sys.argv ## ['report.py', 'portfolio.csv', 'prices.csv']
Вот простой пример обработки аргументов:
import sys
if len(sys.argv)!= 3:
raise SystemExit(f'Usage: {sys.argv[0]} ' 'portfile pricefile')
portfile = sys.argv[1]
pricefile = sys.argv[2]
...
Стандартный ввод/вывод (или stdio) - это файлы, работающие аналогично обычным файлам.
sys.stdout
sys.stderr
sys.stdin
По умолчанию вывод с помощью print
направляется в sys.stdout
. Ввод читается из sys.stdin
. Трассировки и ошибки направляются в sys.stderr
.
Обратите внимание, что stdio может быть подключен к терминалам, файлам, каналам и т.д.
$ python3 prog.py > results.txt
## или
$ cmd1 | python3 prog.py | cmd2
Переменные окружения настраиваются в оболочке.
$ export NAME dave
$ export RSH ssh
$ python3 prog.py
os.environ
- это словарь, содержащий эти значения.
import os
name = os.environ['NAME'] ## 'dave'
Изменения отражаются в любых дочерних процессах, запускаемых программой позже.
Завершение программы обрабатывается с помощью исключений.
raise SystemExit
raise SystemExit(exitcode)
raise SystemExit('Informative message')
Альтернативный вариант.
import sys
sys.exit(exitcode)
Ненулевой код выхода указывает на ошибку.
#!
В Unix строка #!
может запускать скрипт как Python. Добавьте следующее в первую строку файла вашего скрипта.
#!/usr/bin/env python3
#./prog.py
...
Для этого требуются права на выполнение.
$ chmod +x prog.py
## Затем вы можете выполнить
$./prog.py
... вывод...
Примечание: Python Launcher для Windows также ищет строку #!
, чтобы указать версию языка.
Наконец, вот общий шаблон кода для Python-программ, которые запускаются как командные строки:
#!/usr/bin/env python3
#./prog.py
## Import statements (libraries)
import modules
## Functions
def spam():
...
def blah():
...
## Main function
def main(argv):
## Parse command line args, environment, etc.
...
if __name__ == '__main__':
import sys
main(sys.argv)
main()
В файл report.py
добавьте функцию main()
, которая принимает список параметров командной строки и выводит тот же результат, что и раньше. Теперь вы должны быть в состоянии запускать его интерактивно, как показано ниже:
>>> import report
>>> report.main(['/home/labex/project/report.py', '/home/labex/project/portfolio.csv', '/home/labex/project/prices.csv'])
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84
>>>
Измените файл pcost.py
так, чтобы он имел аналогичную функцию main()
:
>>> import pcost
>>> pcost.main(['/home/labex/project/pcost.py', '/home/labex/project/portfolio.csv'])
Total cost: 44671.15
>>>
Измените программы report.py
и pcost.py
так, чтобы они могли выполняться как скрипты в командной строке:
$./report.py portfolio.csv prices.csv
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84
$./pcost.py portfolio.csv
Total cost: 44671.15
Поздравляем! Вы завершили лабораторную работу по главному модулю. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.