меры, приведенные далее, будут работать. В противном случае вам придется запускать их
с помощью Python 2.
338
Глава 11. Конкуренция и сети
Для начала установим пакет fabric с помощью следующей команды:
$ pip2 install fabric
Вы можете запустить код локально из файла fabric непосредственно, без ис-
пользования SSH. Сохраните первый файл под именем fab1.py:
def iso():
from datetime import date
print(date.today().isoformat())
Далее введите следующую команду, чтобы запустить его:
$ fab -f fab1.py -H localhost iso
[localhost] Executing task 'iso'
2014-02-22
Done.
Опция -f fab1.py указывает использовать файл fabric fab1.py вместо варианта
по умолчанию fabfile.py. Опция -H localhost указывает запустить команду на вашем
локальном компьютере. Наконец, iso — это имя функции, которую нужно запустить.
Она сработает точно так же, как и в рассмотренном нами примере, где использова-
лись RPC. Вы можете найти большее количество опций на сайте с документацией
(http://docs.fabfile.org/).
Для того чтобы запускать внешние программы на локальной или удаленной
машинах, вам нужно запустить SSH-сервер. В системах семейства Unix этот сервер
называется sshd; команда service sshd status скажет вам, запущен ли сервер, а ко-
манда service sshd start запустит его при необходимости. В операционных системах
Mac откройте пункт меню System Preferences, щелкните на вкладке Sharing, а затем
установите флажок Remote Login. Операционная система Windows не имеет встро-
енной поддержки SSH, вам стоит установить putty (http://bit.ly/putty-ssh).
Сейчас мы снова используем имя функции iso, но в этот раз заставим ее запускать
команду с помощью метода local(). Так выглядят команда и результат ее работы:
from fabric.api import local
def iso():
local('date -u')
$ fab -f fab2.py -H localhost iso
[localhost] Executing task 'iso'
[localhost] local: date -u
Sun Feb 23 05:22:33 UTC 2014
Done.
Disconnecting from localhost... done.
Удаленный двойник функции local() — функция run(). Так выглядит файл fab3.py:
from fabric.api import run
def iso():
run('date -u')
Сети
339
Применение функции run() указывает fabric использовать SSH для того, чтобы
связаться с указанными в командной строке хостами, поскольку была указана
опция -H (показано в следующем примере). В противном случае будет использован