用于织物的独立fabfile?

2024-06-17 07:57:45 发布

您现在位置:Python中文网/ 问答频道 /正文

有可能使fapfile独立吗?
我不太喜欢运行外部工具'fab'。如果我能够独立地获得fabfile,我可以从(Eclipse/Pydev)IDE中运行该文件,轻松地调试它,使用项目配置和路径等。
为什么这个不起作用:

from fabric.api import run

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

if __name__ == '__main__':
    host_type()    

Tags: 文件工具项目runfrom路径hosttype
3条回答

如果我没记错的话,我也无法让Fabric API实现我想要的功能。我决定完全放弃额外的层,直接使用Paramiko(Fabric使用的底层SSH库):

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实例,或者计算Fabric API。我有几个项目,包括网络和控制台,以这种方式使用Paramiko,我没有遇到太多麻烦。在

Paramiko是extensively documented。在

我最终找到了解决方案(而且非常简单!)。
在我的fabfile中,我添加了:

from fabric.main import main

if __name__ == '__main__':
    import sys
    sys.argv = ['fab', '-f', __file__, 'update_server']
    main()

我希望这能帮助人们。。。在

这不是一个很好的解决方案,但会起作用:

import subprocess

def hello():
    print 'Hello'

if __name__ == '__main__':
    subprocess.call(['fab', '-f', __file__, 'hello'])

相关问题 更多 >