За основу взята "Глава 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 в модуль для повторного использования в дальнейшем и как скрипт выполняемый из командной строки и как модуль.

  • В языке 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

Все! Наш скрипт готов к повторному использованию и как модуль и как сценарий для запуска из командной строки.

  1. Конструкция import pysysinfo_func импортирует все функции модуля pysysinfo_func
  2. Конструкция pysysinfo_func import disk_func импортирует только функцию disk_func модуля pysysinfo_func

📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!