2017-02-14 17 views
0

Я пытаюсь написать функцию, где он будет ssh на удаленный хост и для каждого файла в каталоге, обработать его.Python - Как запустить цикл for через файлы в каталоге, доступ к которому осуществляется через ssh?

Например, моя текущая функция для цикла является:

import fnmatch, os  
def process_logfiles_in_remote_directory(remotedir): 
    for filename in os.listdir(remotedir): 
     if fnmatch.fnmatch(filename, '*.log'): 
      filename = os.path.join(remotedir, filename) 
      ## Do something here... 

Как обернуть выше функции в связи SSH, что-то в строке этого:

ssh_client = paramiko.SSHClient() 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_client.connect("www.remotehost.com", username="admin", password="testing") 
stdin, stdout, stderr = ssh_client.exec_command(process_logfiles_in_remote_directory('/tmp')) 
ssh_client.close() 
+0

Возможный дубликат [Как перечислить все папки и файлы в каталоге после подключения через sftp в python] (http://stackoverflow.com/questions/12295551/how-to-list-all-the-folders- и-файлы-в-каталог-после-соединительного-Through) – kawadhiya21

ответ

0

It вероятно, будет проще скопировать ваш скрипт Python (тот, который находится в цикле) на ваш удаленный компьютер, используя SCP, а затем запустить скопированный сценарий Python на удаленном компьютере.

import fnmatch, os  
def process_logfiles_in_remote_directory(remotedir): 
    for filename in os.listdir(remotedir): 
    if fnmatch.fnmatch(filename, '*.log'): 
     filename = os.path.join(remotedir, filename) 
     ## Do something here... 
if __name__ == '__main__': 
    process_logfiles_in_remote_directory('/tmp') 

Тогда на ваш местный, вы можете сделать:

ssh_client = paramiko.SSHClient() 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_client.connect("www.remotehost.com", username="admin", password="testing") 
stdin, stdout, stderr = ssh_client.exec_command("python <filename>.py") 
ssh_client.close() 

Это жестко запрограммированный путь к /tmp хотя. Вы можете заставить свой файл принять аргументы командной строки, чтобы обрабатывать любой путь, который вы передаете во время выполнения.