модуль paramiko для итерации внутри папки для хранения подпапок и файлов в списке - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь скопировать журналы (файлы всех подпапок) из OSWatcher на конкретную дату с сервера базы данных.у нас есть что-то вроде этого: из windows мы используем putty для подключения к серверу Jump, а затем с сервера Jump Server делаем ssh на конкретный сервер (производственная среда)

я использую stdin, stdout, stderr = ssh_client.exec_command ("ps -ef | grep -i osw | awk '{print $ 11}' \ n"), чтобы вывести список папок из архивной папки OSW, и мне нужно сохранить его в списке, а затем перейти к каждой подпапке и скопироватьимена файлов внутри другого списка для итерации.

output = client.run_command ('ls -ltrh / tmp /', sudo = True) для строки на выходе ['fsehlp04']. stdout: print (line) print(вывод) "" "

OSWatcher Python Script: https://github.com/coolkenshin/osw-anomaly

запись o / p в файл https://avayauc.wordpress.com/2018/04/20/paramiko-sshv2-python/

import paramiko
import getpass

ip = input("Please enter hostname: ")
name = input("Please enter UserName: ")
password = getpass.getpass('password:  ')
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=name,password=password)   

remote_connection = ssh_client.invoke_shell()
remote_connection.send("ssh <host_name>\n") 
#output = remote_connection.recv(500)
time.sleep(3)                                                            
remote_connection.send("<password>\n") 
#output = remote_connection.recv(500)
time.sleep(3)

#remote_connection.send(" ps -ef|grep -i osw | grep -o '/dbscripts/oracle/osw/archive' \n")

stdin, stdout, stderr = ssh_client.exec_command("ps -ef|grep -i osw | grep -o '/dbscripts/oracle/osw/archive'\n")
time.sleep(3)
result = stdout.read().decode('ascii').strip("\n")
#print(type(result))
#print("************************************************\n")
li = list(result.split("\n")) 
path=li[0]
remote_connection.send("cd "+path+"\n")
#print(result)
#print(li)
time.sleep(2)

remote_connection.send("pwd\n")
time.sleep(2) 
remote_connection.send("ls -lrth|awk '{print $9}'\n")

вывод этой команды (списокподпапки) необходимо сохранить в списке, а затем перейти к каждой подпапке, скопировав имена файлов в другие списки.

Я пытаюсь сделать это следующим образом:

stdin, stdout, stderr = ssh_client.exec_command("ls -lrth|awk '{print $9}'\n") --> this is pointing to the same location on the jump server.(i thinks channel is different)
result = stdout.read().decode('ascii').strip("\n")
li = list(result.split("\n"))

после многих статейздесь, но я не получаю желаемый результат для:

remote_connection.send("ls -lrth|awk '{print $9}'\n")
if remote_connection.recv_ready():#clearing the buffer
output = remote_connection.recv(10240)

у меня должен быть один список с 9 именами подпапок для OSWatcher и 9 списками, содержащими имена этих подпапок независимо друг от друга.

Спасибо за все предложения в Advance.

...