Структура программы на Python
За основу взята "Глава 1. Использование функций в языке Python" книги ISBN13:978-5-93286-149-3
$ cat pysysinfo_func.py #!/usr/bin/env python #Здесь указывается кодировка этого скрипта, а не файла данных, который будет возможно обрабатываться. # -*- coding: utf8 -*- # #System Information Gathering Script #Сценарий сбора информации о системе import subprocess #Command 1 def uname_func(): uname = "uname" uname_arg = "-a" print "Gathering system information with %s command:\n" % uname subprocess.call([uname, uname_arg]) #Command 2 def disk_func(): diskspace = "df" diskspace_arg = "-h" print "Gathering diskspace information %s command:\n" % diskspace subprocess.call([diskspace, diskspace_arg]) #Главная функция, которая вызывает остальные функции def main(): uname_func() disk_func() # Скрипт начинает работать с вызова главной функции main(), соответственно если функцию main() # закомментировать вызова функций не произойдет. Когда нет никакого управления потоком или # главной функции, весь программный код выполняется немедленно, во время импортирования модуля. main()
Повторное использование программного кода с помощью инструкция import
Превратим выполняемый скрипт pysysinfo_func.py в модуль для повторного использования в дальнейшем и как скрипт выполняемый из командной строки и как модуль.
- В языке Python файл является модулем и наоборот.
Поэтому pysysinfo_func.py уже можно импортировать.
- В инструкции import нельзя указывать расширение файла .py. Импорт закончиться неудачей, если расширение будет указано.
Выполним импорт модуля pysysinfo_func.py. Когда импортируется файл, содержащий программный код на Python, он тут же выполняется.
In [2]: import pysysinfo_func Gathering system information with uname command: Linux ubuntuatom 2.6.28-14-generic #47-Ubuntu SMP Sat Jul 25 00:28:35 UTC 2009 i686 GNU/Linux Gathering diskspace information df command: Файловая система Разм Исп Дост Исп% смонтирована на /dev/sda1 14G 3,1G 10G 24% / tmpfs 1002M 0 1002M 0% /lib/init/rw varrun 1002M 340K 1002M 1% /var/run varlock 1002M 0 1002M 0% /var/lock udev 1002M 156K 1002M 1% /dev tmpfs 1002M 496K 1002M 1% /dev/shm lrm 1002M 2,2M 1000M 1% /lib/modules/2.6.28-14-generic/volatile /dev/sda8 122G 64G 51G 56% /home /dev/sda6 942M 18M 877M 2% /tmp /dev/sda7 9,2G 803M 8,0G 10% /var /dev/sdb1 3,8G 2,4G 1,4G 64% /media/disk
Для того, чтобы иметь возможность запускать скрипт из командной строки и одновременно при импортировании модуль выводил данные только по требованию, нужно определить когда следует вызывать главную функцию main (). Для этого изменим последнюю часть сценария:
$ cat pysysinfo_func.py #!/usr/bin/env python #Здесь указывается кодировка этого скрипта, а не файла данных, который будет возможно обрабатываться. # -*- coding: utf8 -*- # #System Information Gathering Script #Сценарий сбора информации о системе import subprocess #Command 1 def uname_func(): uname = "uname" uname_arg = "-a" print "Gathering system information with %s command:\n" % uname subprocess.call([uname, uname_arg]) #Command 2 def disk_func(): diskspace = "df" diskspace_arg = "-h" print "Gathering diskspace information %s command:\n" % diskspace subprocess.call([diskspace, diskspace_arg]) #Главная функция, которая вызывает остальные функции def main(): uname_func() disk_func() if __name__ == "__main__": main()
Любой программный код, входящий в состав блока этой условной инструкции, будет выполняться, только когда модуль выполняется из командной строки.
Выполним импорт обновленного модуля pysysinfo_func.py. После добавления инструкции if name - никакая информация выведена не была.
In [1]: import pysysinfo_func
Используя клавишу Tab - получим все атрибуты импортированного модуля.
In [2]: pysysinfo_func. pysysinfo_func.__builtins__ pysysinfo_func.__getattribute__ pysysinfo_func.__reduce_ex__ pysysinfo_func.main pysysinfo_func.__class__ pysysinfo_func.__hash__ pysysinfo_func.__repr__ pysysinfo_func.py pysysinfo_func.__delattr__ pysysinfo_func.__init__ pysysinfo_func.__setattr__ pysysinfo_func.pyc pysysinfo_func.__dict__ pysysinfo_func.__name__ pysysinfo_func.__sizeof__ pysysinfo_func.subprocess pysysinfo_func.__doc__ pysysinfo_func.__new__ pysysinfo_func.__str__ pysysinfo_func.uname_func pysysinfo_func.__file__ pysysinfo_func.__package__ pysysinfo_func.__subclasshook__ pysysinfo_func.__format__ pysysinfo_func.__reduce__ pysysinfo_func.disk_func
Вызовем функцию pysysinfo_func.disk_func()
In [3]: pysysinfo_func.disk_func() Gathering diskspace information df command: Файловая система Разм Исп Дост Исп% смонтирована на /dev/sda1 14G 3,1G 10G 24% / tmpfs 1002M 0 1002M 0% /lib/init/rw varrun 1002M 340K 1002M 1% /var/run varlock 1002M 0 1002M 0% /var/lock udev 1002M 156K 1002M 1% /dev tmpfs 1002M 496K 1002M 1% /dev/shm lrm 1002M 2,2M 1000M 1% /lib/modules/2.6.28-14-generic/volatile /dev/sda8 122G 64G 51G 56% /home /dev/sda6 942M 18M 877M 2% /tmp /dev/sda7 9,2G 803M 8,0G 10% /var /dev/sdb1 3,8G 2,4G 1,4G 64% /media/disk
Все! Наш скрипт готов к повторному использованию и как модуль и как сценарий для запуска из командной строки.
Способы импортирования модуля
- Конструкция import pysysinfo_func импортирует все функции модуля pysysinfo_func
- Конструкция pysysinfo_func import disk_func импортирует только функцию disk_func модуля pysysinfo_func
Крупнейшая в Европе школа английского языка
Промокоды, акции и подарки, чтобы Ваше обучение было не только интересным, но и выгодным. Закажите пробный урок уже сейчас!
skyeng.ru
Онлайн школа английского языка
Английский по скайпу от 680р за урок, без заучивания правил. Эффективно! Удобно! Выгодно! Начните обучение прямо сейчас.
melene.ru
Школа английского языка по Skype
Персональные занятия по разумным ценам. Бесплатные ресурсы для студентов: разговорные клубы, блог, вебинары, книги, тест на определение уровня английского. Пробный урок бесплатно!
englex.ru