Search code examples
pythonfabric

Python fabric calling script "remote path"


I'm using fabric to connect to remote host, when i'm there, I try to call a script that I made (It parses the file I give in argument). But when I call the script from inside my Fabfile.py, it assumes the path I gave is from the machine I launch the fabfile from (so not my remote host)

In my fabfile.py I have:

Import import servclasse
env.host='host1'
def listconf():
  #here I browes to the correct folder
  s=servclasse.Server("my.file") #this is where I want it to open the host1:my.file file and instanciate a classe from what it parsed

If i do this, it tries to open the file from the folder where servclass.py is. Is there a way to give a "remote path" in argument? I would rather not downloading the file. Should I upload the script servclasse.py with the operation.put before calling it?


Edit: more info In my servclasse I have this:

def __init__(self, path):
    self.config = ConfigParser.ConfigParser(allow_no_value=True)
    self.config.readfp(open(path))

Solution

  • The function open() was the problem. I figured out how to do it so i'll drop it here in case someone read this topic one day :

    def listconf():
     #first I browes to the correct folder then
        contents = StringIO.StringIO()
        get("MyFile",contents)
        contents.seek(0)
        s=Server(contents)
    

    and in the servclass.py

    def __init__(self, objfile):
        self.config = ConfigParser.ConfigParser(allow_no_value=True)
        self.config.readfp(objfile)
        #and i do my stuffs