Soy nuevo en la programación de python. Tengo este problema: tengo una lista de archivos de texto (tanto comprimidos como no) y necesito: - conectarme al servidor y abrirlos - después de la apertura del archivo, necesito tomar su contenido y pasarlo a otra función de python que escribíPython, redireccionando la secuencia de Popen a una función de pitón
def readLogs (fileName):
f = open (fileName, 'r')
inStream = f.read()
counter = 0
inStream = re.split('\n', inStream) # Create a 'list of lines'
out = "" # Will contain the output
logInConst = "" # log In Construction
curLine = "" # Line that I am working on
for nextLine in inStream:
logInConst += curLine
curLine = nextLine
# check if it is a start of a new log && check if the previous log is 'ready'
if newLogRegExp.match(curLine) and logInConst != "":
counter = counter + 1
out = logInConst
logInConst = ""
yield out
yield logInConst + curLine
def checkFile (regExp, fileName):
generatore = readLogs(fileName)
listOfMatches=[]
for i in generatore: #I'm now cycling through the logs
# regExp must be a COMPILE regular expression
if regExp.search(i):
listOfMatches.append(i)
return listOfMatches
para elaborar la información contenida en esos archivos. La función tiene el objetivo de escribir en solo 1 línea los registros que están almacenados en esos archivos usando 3 líneas ... La función funciona bien en archivos leídos desde mi máquina local pero no puedo encontrar la manera de conectarme a un servidor remoto y crear estos registros de una sola línea sin almacenar el contenido de cada archivo en una cadena y luego trabajar con la cadena ... el comando que utilizo para conectar a la máquina remota es:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] y retList [2] son el usuario @ remote y el nombre de la carpeta a la que tengo que acceder
¡Gracias a todos por adelantado!
ACTUALIZACIÓN:
Mi problema es que tengo que establecer una conexión ssh primero:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Todos los archivos que necesito para abrir se almacenan en una lista, fileList [], parte de ellos están comprimidos (.gz) y parte son solo archivos de texto !! He intentado todos los procedimientos que mostraste antes de que nada funcionara. Creo que modifico el tercer argumento de la función Popen pero no puedo entender cómo hacerlo. Hay alguien que pueda ayudarme ???
Realmente no entiendo, yo debería escribir algo como para nextLine en Popen ([ 'ssh ', retList [0],' cd '+ retList [2] +'; cat '+ fileName], stdout = PIPE) .communicate() [0] en el FOR más externo de la función readLogs ??? – wheisenberg
Utilice el atributo stdout para acceder al conducto. comunicarse no ayudará aquí. He actualizado mi respuesta con un ejemplo. – Ber