Передача ткани env.hosts sting как переменная не работает в функции

Передача ткани. Env.hosts sting как переменная не работает в функции.

demo.py

#!/usr/bin/env python from fabric.api import env, run def deploy(hosts, command): print hosts env.hosts = hosts run(command) 

main.py

 #!/usr/bin/env python from demo import deploy hosts = ['localhost'] command = 'hostname' deploy(hosts, command) 

python main.py

 ['localhost'] No hosts found. Please specify (single) host string for connection: 

Но работает env.host_string!

demo.py

 #!/usr/bin/env python from fabric.api import env, run def deploy(host, command): print host env.host_string = host run(command) 

main.py

 #!/usr/bin/env python from demo import deploy host = 'localhost' command = 'hostname' deploy(host, command) 

python main.py

 localhost [localhost] run: hostname [localhost] out: heydevops-workspace 

Но env.host_string недостаточно для нас, это единственный хост. Возможно, мы можем использовать env.host_string в цикле, но это не хорошо. Потому что мы также хотим установить номер параллельных задач и запустить их параллельно.

Теперь в ddep (мой механизм развертывания) я использую MySQLdb для получения параметров, а затем выполняю команду fab, например:

 os.system("fab -f service/%s.py -H %s -P -z %s %s" % (project,host,number,task)) 

Это простой способ, но не очень хороший. Поскольку, если я использую команду fab, я не могу поймать исключения и неудачи результатов в Python, чтобы мой ddep мог «повторить» неудавшиеся хосты. Если я использую «из развертывания демонстрационного импорта», я могу контролировать и получать их по некоторым кодам в Python.

Итак, теперь «env.host» – это проблема. Может ли кто-нибудь дать мне решение? Большое спасибо.

    2 Solutions collect form web for “Передача ткани env.hosts sting как переменная не работает в функции”

    Вот мое понимание.

    Согласно документам , если вы вызываете текстовые задачи из сценариев python – вы должны использовать fabric.tasks.execute .

    Должно быть что-то вроде этого:

    • demo.py

       from fabric.api import run from fabric.tasks import execute def deploy(hosts, command): execute(execute_deploy, command=command, hosts=hosts) def execute_deploy(command): run(command) 
    • main.py

       from demo import deploy hosts = ['localhost'] command = 'hostname' deploy(hosts, command) 

    Затем запустите python main.py Надеюсь, это поможет.

    Наконец, я исправил эту проблему, используя execute () и exec.

    main.py

     #!/usr/bin/env python from demo import FabricSupport hosts = ['localhost'] myfab = FabricSupport() myfab.execute("df",hosts) 

    demo.py

     #!/usr/bin/env python from fabric.api import env, run, execute class FabricSupport: def __init__(self): pass def hostname(self): run("hostname") def df(self): run("df -h") def execute(self,task,hosts): get_task = "task = self.%s" % task exec get_task execute(task,hosts=hosts) 

    python main.py

     [localhost] Executing task 'hostname' [localhost] run: hostname [localhost] out: heydevops-workspace 
     
    Interesting Posts for Van-Lav

    Как добавить внешний объект в качестве панели полей в Wagtail CMS

    Грамматический список Присоединиться к Python

    Преобразование кода Matlab в Python с использованием библиотеки нейронных сетей

    Подклассифицировать парсер ElementTree для сохранения комментариев

    Почему словарные значения не находятся в вставленном порядке?

    запрос sqlalchemy с флагом с ключевым словом в качестве переменной

    Как инициализировать двумерный массив в Python?

    Сначала визуализировать страницу и обновить ее через AJAX, используя тот же шаблон HTML

    Eclipse: «Python не настроен»

    Преобразовать символы ASCII в латинские буквы Unicode FULLWIDTH в Python?

    симпатичный фактор

    Как отсортировать OrderedDict of OrderDict – Python

    Python – печать словаря в виде горизонтальной таблицы с заголовками

    Как избежать объединения данных в память. При повторении объекта курсора в pymongo?

    при установке statsmodels, я получаю следующую ошибку: RuntimeError: словарь изменен размер во время итерации

    Python - лучший язык программирования в мире.