Je suis novice en programmation python. J'ai ce problème: J'ai une liste de fichiers texte (compressés et non) et je dois: - se connecter au serveur et les ouvrir - après l'ouverture du fichier, je dois prendre son contenu et passer à une autre fonction python que j'ai écritPython, rediriger le flux de Popen vers une fonction 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
afin d'élaborer les informations contenues dans ces fichiers. La fonction a pour but d'écrire en 1 ligne les logs qui sont stockés dans ces fichiers en utilisant 3 lignes ... La fonction fonctionne correctement sur les fichiers lus depuis ma machine locale mais je n'arrive pas à comprendre comment me connecter à un serveur distant et créer ces sans mémoriser le contenu de chaque fichier logs d'une ligne dans une chaîne de travail et ensuite avec la chaîne ... la commande que j'utilise pour se connecter à l'ordinateur distant est la suivante:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] et retList [2] sont l'utilisateur @ remote et le nom du dossier auquel je dois accéder
Merci à tous à l'avance!
MISE À JOUR:
Mon problème est que je dois établir une connexion ssh premier:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Tous les fichiers que je dois ouvrir sont stockés dans une liste, fileList [], une partie d'entre eux sont compressés (.gz) et une partie ne sont que des fichiers texte !! J'ai essayé toutes les procédures que vous avez montré avant que rien ne fonctionne ... Je pense que je vais modifier le troisième argument de la fonction Popen mais je n'arrive pas à comprendre comment le faire! Y a-t-il quelqu'un qui peut m'aider ???
Je ne comprends vraiment pas, je devrais écrire quelque chose comme pour nextLine dans Popen ([ 'ssh ', retList [0],' cd '+ retList [2] +'; cat '+ nomfichier], stdout = PIPE) .communicate() [0] dans le plus externe FOR de la fonction readLogs ??? – wheisenberg
Utilisez l'attribut stdout pour accéder au tube. communiquer ne va pas aider ici. J'ai mis à jour ma réponse avec un exemple. – Ber