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.

有帮助吗?

解决方案

You can use subprocess module, here is an example:

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

其他提示

You may also use pysftp first install it using pip install pysftp then the below code can list the files on remote linux machine from windows as well

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

with pysftp.Connection('ipLinuxmachine', username='username', password='passwd',cnopts=cnopts) as sftp:
    out=sftp.execute('cd path of directory ; ls')
    print out
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top