Введение в Основную Программу

PythonPythonBeginner
Практиковаться сейчас

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

В 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)

Упражнение 3.15: Функции 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
>>>
✨ Проверить решение и практиковаться

Упражнение 3.16: Создание скриптов

Измените программы 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, чтобы улучшить свои навыки.