Uso de Python Fabric sin la herramienta de línea de comandos (fab)

Las documentaciones de Altough Fabric se refieren a una forma de usar la biblioteca para el acceso SSH sin requerir la herramienta de línea de comandos fab y / o las tareas, parece que no puedo manejar una forma de hacerlo.

Quiero ejecutar este archivo ( example.py ) ejecutando solo ‘ python example.py ‘:

env.hosts = [ "example.com" ] def ps(): run("ps") ps() 

Gracias.

Terminé haciendo esto:

 from fabric.api import env from fabric.api import run class FabricSupport: def __init__ (self): pass def run(self, host, port, command): env.host_string = "%s:%s" % (host, port) run(command) myfab = FabricSupport() myfab.run('example.com', 22, 'uname') 

Lo que produce:

 [example.com:22] run: uname [example.com:22] out: Linux 
 #!/usr/bin/env python from fabric.api import hosts, run, task from fabric.tasks import execute @task @hosts(['user@host:port']) def test(): run('hostname -f') if __name__ == '__main__': execute(test) 

Más información: http://docs.fabfile.org/en/latest/usage/library.html

Aquí hay tres enfoques diferentes, todos utilizando el método de execute

 from fabric.api import env,run,execute,hosts # 1 - Set the (global) host_string env.host_string = "hamiltont@10.0.0.2" def foo(): run("ps") execute(foo) # 2 - Set host string using execute's host param execute(foo, hosts=['hamiltont@10.0.0.2']) # 3 - Annotate the function and call it using execute @hosts('hamiltont@10.0.0.2') def bar(): run("ps -ef") execute(bar) 

Para usar los archivos de claves, deberá configurar env.key o env.key_filename , así:

 env.key_filename = 'path/to/my/id_rsa' # Now calls with execute will use this keyfile execute(foo, hosts=['hamiltont@10.0.0.2']) 

También puede suministrar múltiples archivos de claves y cualquiera que inicie sesión en ese host será utilizado

Encontré mi solución. Necesitaba proporcionar mi propia * env.host_string * porque cambiar env.user / env.keyfile / etc no actualiza automáticamente este campo.

Esto es lo que hay que hacer:

en example.py

 from fabric.api import settings, run def ps(): with settings(host_string='example.com'): run("ps") ps() 

vea los documentos para usar el tejido como una biblioteca: http://docs.fabfile.org/en/1.8/usage/env.html#host-string