За основу взята "Глава 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()
Превратим выполняемый скрипт pysysinfo_func.py в модуль для повторного использования в дальнейшем и как скрипт выполняемый из командной строки и как модуль.
Поэтому pysysinfo_func.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
Все! Наш скрипт готов к повторному использованию и как модуль и как сценарий для запуска из командной строки.