Автономный fabfile для матрицы?

Действительно ли возможно сделать fabfile автономное?
Я не очень люблю выполнение внешнего 'потрясающего' инструмента. Если мне удается получить fabfile автономное, я могу петлять из (Eclipse / Pydev) IDE, легко отладить его, использовать конфигурации проекта и пути и т.д.
Почему не делает этой работы:

from fabric.api import run

def host_type():
    run('uname -s')

if __name__ == '__main__':
    host_type()    
8
задан Tal Weiss 19 July 2010 в 06:31
поделиться

2 ответа

Это не очень хорошее решение, но будет работать:

import subprocess

def hello():
    print 'Hello'

if __name__ == '__main__':
    subprocess.call(['fab', '-f', __file__, 'hello'])
2
ответ дан 5 December 2019 в 06:09
поделиться

Если я правильно помню, я также не мог заставить Fabric API делать то, что я хотел. Я решил полностью отказаться от дополнительного слоя и использовать Paramiko (базовую библиотеку SSH, используемую Fabric) напрямую:

import os
import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname.example.com', 22, 'username', 'password')
ssh.save_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
stdin, stdout, stderr = ssh.exec_command('uname -s')
print stdout.read()

Несмотря на то, что это требует несколько дополнительных действий, такой способ позволяет использовать уровень SSH напрямую, в отличие от использования subprocess для spwan другого экземпляра Python или выяснения API Fabric. У меня есть несколько проектов, как веб-, так и консольных, использующих Paramiko таким образом, и у меня не было слишком много проблем.

Paramiko имеет обширную документацию.

3
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: