Question

Je suis nouveau dans la programmation python. J'ai ce problème: j'ai une liste de fichiers texte (compressés et non compressés) et j'ai besoin de: - connectez-vous au serveur et ouvrez-les - après l'ouverture du fichier, je dois prendre son contenu et le transmettre à une autre fonction python que j'ai écrite

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

pour élaborer les informations contenues dans ces fichiers. La fonction a pour but d’écrire en 1 ligne les journaux stockés dans ces fichiers sur 3 lignes ... La fonction fonctionne correctement pour les fichiers lus à partir de mon ordinateur local, mais je ne sais pas comment me connecter à un serveur distant. créez ces journaux d’une ligne sans stocker le contenu de chaque fichier dans une chaîne, puis utilisez cette chaîne ... La commande que j’utilise pour me connecter à la machine distante 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 @ distant et le nom du dossier auquel je dois accéder

Merci d'avance à tous!

UPDATE:

Mon problème est que je dois d'abord établir une connexion ssh:

pr1=Popen(['ssh', 'siatc@lgssp101', '*~/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 [], dont une partie est compressée (.gz) et une partie ne sont que des fichiers texte !! J'ai essayé toutes les procédures que vous avez montrées avant que rien ne marche ... Je pense que je dois modifier le troisième argument de la fonction Popen mais je ne peux pas comprendre comment le faire! Y a-t-il quelqu'un qui peut m'aider ???

Était-ce utile?

La solution

Vous n'êtes pas obligé de scinder le flux / fichier en lignes vous-même. Il suffit de itérer:

for ln in f:
    # work on line in ln

Cela devrait fonctionner aussi bien pour les fichiers (en utilisant open () pour file ()) et les tubes (en utilisant Popen). Utilisez la propriété stdout de l'objet popen pour accéder au canal connecté à stdout du sous-processus

.

Exemple

from subprocess import Popen, PIPE
pp = Popen('dir', shell=True, stdout=PIPE)

for ln in pp.stdout:
    print '#',ln

Autres conseils

Supprimez InStream et utilisez simplement l'objet fichier.

Pour que votre code se lise:

for nextLine in f.readlines():
    .
    .
    .

Ber a raison.

Pour clarifier, le comportement par défaut de l'itération d'un objet fichier est de renvoyer la ligne suivante. donc " pour nextLine in f " vous donnera les mêmes résultats que " pour NextLine dans f.readlines () ".

Voir la documentation de l'objet fichier pour plus de détails: http: // docs .python.org / library / stdtypes.html # objets-fichier-bltin

Si vous voulez faire quelque chose via ssh, pourquoi ne pas utiliser le le module SSH Python ?

Essayez cette page, meilleure information sur Popen que j'ai trouvée jusqu'à présent ....

http://jimmyg.org/blog/2009/working- with-python-subprocess.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top