Search code examples
pythonlinuxlistwsgidir

Remote Directory Listing Python WSGI


I'm currently an Intern in a IT service and I've been asked to build a web based app using Python that will run on a Linux environment. This web app has to be WSGI-compliant and I cannot use any framework.

My issue currently is that I want to have a variable set as a list of files in the said directory. Therefore I can then proceed to list those files by printing a table having each row being a file.

I am aware of os.listdir() but can't find a way to use it on a remote server (which is supposed not to be the case considering what google searches showed me...).

I tried an os.system(ssh root@someip:/path/to/dir/) but as python doc states, I cant get the output I want as it returns some integers...

Below is a piece of my script.

#ip is = to the ip of the server I want to list.

ip = 192..............

directory = "/var/lib/libvirt/images/"

command = "ssh root@"+ip+" ls "+directory

dirs = os.system(command)


files = ""
table_open = "<table>"
table_close = "</table>"
table_title_open = "<th>Server: "
table_title_close = "</th>"
tr_open = "<tr>"
tr_close = "</tr>"
td_open = "<td>"
td_close = "</td>"
input_open = "<input type='checkbox' name='choice' value='"
input_close = "'>"

#If i don't put dirs in brackets it raises an error (dirs not being iterable)
for file in [dirs]:

    files = files + tr_open+td_open+file+td_close+td_open+input_open+file+input_close+td_close+tr_close

table = table_open+table_title_open+str(num_server)+table_title_close+files+table_close

I've tried this with a local directory (with os.listdir) and it works perfectly. I am having troubles only with remote directory listing...

I do hope that my question is crystal clear, if not I'll do my best to be more accurate.

Thanks in advance, -Karink.


Solution

  • You can use subprocess module, here is an example:

    import subprocess
    ls = subprocess.Popen(['ssh','[email protected]', 'ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err =  ls.communicate()
    print out
    print err