Search code examples
pythonlinuxpython-2.7getfabric

Python - Fabric - Getting files


I am trying to write a simple python code with fabric to transfer a file from one host to another using the get() function although I keep getting error message:

MacBook-Pro-3:PythonsScripts$ fab get:'/tmp/test','/tmp/test'
[hostname] Executing task 'get'
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/fabric/main.py", line 743, in main
   *args, **kwargs
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 387, in execute
    multiprocessing
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 277, in _execute
    return task.run(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/fabric/tasks.py", line 174, in run
    return self.wrapped(*args, **kwargs)
  File "/Users/e0126914/Desktop/PYTHON/PythonsScripts/fabfile.py", line 128, in get
    get('/tmp/test','/tmp/test') ***This line repeats many times then last error below***
RuntimeError: maximum recursion depth exceeded

My current code is:

from fabric.api import *
from getpass import getpass
from fabric.decorators import runs_once

env.hosts = ['hostname']
env.port = '22'
env.user = 'parallels'
env.password="password"


def abc(remote_path, local_path):
    abc('/tmp/test','/tmp/')

Any help would be appreciated!


Solution

  • fabric.api.get already is a method. When you perform from fabric.api import * you are importing fabric's get. You should rename your get function to avoid conflict.

    From inside the abc function, you need to call get

    def abc(p1,p2):
        get(p1, p2)
    

    EDIT: When executing functions through fabric, the arguments are passed through the command line ie. $ fab abc:string1,string2