Ich bin neu in der Python-Programmierung. Ich habe dieses Problem: Ich habe eine Liste von Textdateien (beide komprimiert und nicht) und ich muss: - verbinden mit dem Server und öffnen Sie sie - nach dem Öffnen der Datei muss ich seinen Inhalt nehmen und übergeben es auf eine andere python-Funktion, die ichPython, den Stream von Popen zu einer Python-Funktion umleiten
schriebdef 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
, um die Informationen in diesen Dateien enthalten sind, zu erarbeiten. Die Funktion hat das Ziel, in nur einer Zeile die Protokolle zu schreiben, die in diesen Dateien mit 3 Zeilen gespeichert werden ... Die Funktion funktioniert gut für Dateien von meinem lokalen Computer gelesen, aber ich kann nicht herausfinden, wie Sie eine Verbindung zu einem Remote-Server herstellen und erstellen diese einzeiligen logs ohne den Inhalt jeder Datei in einen String speichert und dann mit der Zeichenfolge arbeitet ... der Befehl, den ich an den entfernten Rechner verbinden verwenden ist:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] und retList [2] sind der Benutzer @ remote und der Ordnername, auf den ich zugreifen muss
Vielen Dank an alle im Voraus!
UPDATE:
Mein Problem ist, dass ich eine SSH-Verbindung zu schaffen haben zuerst:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Alle Dateien, die ich benötige, werden in einer Liste gespeichert zu öffnen, filelist [], Teile davon sind komprimiert (.gz) und Teile sind nur Textdateien !! Ich habe alle Prozeduren ausprobiert, die vor dem Bot angezeigt wurden, aber nichts hat funktioniert ... Ich denke, dass ich das dritte Argument der Popen-Funktion modifizieren muss, aber ich kann nicht herausfinden, wie es geht! Gibt es jemanden, der mir helfen kann ???
Ich verstehe nicht wirklich, ich sollte so etwas wie für nextline in Popen ([ 'ssh schreiben ', retList [0],' cd '+ retList [2] +'; cat '+ Dateiname], stdout = PIPE) .communicate() [0] im äußersten FOR der Funktion readLogs ??? – wheisenberg
Verwenden Sie das stdout-Attribut, um auf die Pipe zuzugreifen. kommunizieren wird hier nicht helfen. Ich habe meine Antwort mit einem Beispiel aktualisiert. – Ber