Sono nuovo alla programmazione Python. Ho questo problema: ho un elenco di file di testo (sia compressi che non) e ho bisogno di: - connettersi al server e aprirli - dopo l'apertura del file, ho bisogno di prendere il suo contenuto e passare a un'altra funzione python che ho scrittoPython, reindirizzare lo stream di Popen a una funzione python
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
per elaborare le informazioni contenute in quei file. La funzione ha lo scopo di scrivere in una sola riga i registri che sono memorizzati in quei file usando 3 linee ... La funzione sta funzionando bene sui file letti dalla mia macchina locale ma non riesco a capire come connettermi a un server remoto e creare questi registri una linea senza memorizzare il contenuto di ciascun file in una stringa e poi lavorare con la stringa ... il comando che uso per connettersi al computer remoto è:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] e retList [2] sono l'utente @ remoto e il nome della cartella a cui devo accedere
Grazie a tutti in anticipo!
UPDATE:
Il mio problema è che devo stabilire una connessione ssh prima:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Tutti i file che ho bisogno di aprire vengono memorizzati in un elenco, fileList [], parte di essi sono compressi (.gz) e parte sono solo file di testo !! Ho provato tutte le procedure che hai mostrato prima che il bot non funzionasse ... Penso di dover modificare il terzo argomento della funzione Popen ma non riesco a capire come farlo! C'è qualcuno che mi può aiutare ???
Io davvero non capisco, avrei dovuto scrivere qualcosa di simile per nextLine a Popen ([ 'ssh ', retList [0],' cd '+ retList [2] +'; cat '+ fileName], stdout = PIPE) .communicate() [0] nella FOR più esterna della funzione readLogs ??? – wheisenberg
Usa l'attributo stdout per accedere alla pipe. comunicare non aiuterà qui. Ho aggiornato la mia risposta con un esempio. – Ber