IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Télécharger une partie d'un fichier en SCP/SSH


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut Télécharger une partie d'un fichier en SCP/SSH
    Bonjour,

    J'utilise un p'tit script pour télécharger un log en SCP / SSH.
    Le fichier log devient volumineux et j'aimerai ne télécharger qu'une partie de ce fichier.
    Fichier log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    id=firewall time="2013-09-04 11:55:38" ...
    id=firewall time="2013-09-04 17:15:56" ...
    id=firewall time="2013-09-05 11:55:38" ...
    id=firewall time="2013-09-06 17:15:56" ...
    id=firewall time="2013-09-08 11:55:38" ...
    id=firewall time="2013-09-08 12:55:38" ...
    id=firewall time="2013-09-08 13:55:38" ...
    id=firewall time="2013-09-09 17:15:56" ...
    Le but serait de récupérer tous les log d'une certaine journée.

    Actuellement j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import time, os
     
    date = time.strftime("%Y%m%d-%H%M%S", time.localtime())
     
    os.system('scp -q -P 22 -r admin@host:/smtp.log '+date+'-smtp.log')
    Merci pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Par défaut
    Bonjour

    Pas de solution avec scp.
    Par contre, avec un ssh + command (cat/grep sed ... à déterminer), ou u programme python sur la machine distante, oui c'est faisable.

    Pour ce problème :
    - ce n'est pour l'instant pas trop un problème python
    - c'est plus un problème de ssh, ou de réseau
    - Pour avancer concrètement, il faut clarifier ce qu'est "une partie de ce fichier" : comment sait-t-on qu'une ligne du fichier est à prendre ou pas ? De la réponse à cette question, découlera des pistes.

    Cordialement
    Emmanuel

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Merci pour votre réponse.

    j'ai peut être mal formulé ma demande...
    Le but serait de récupérer tous les log d'une certaine journée.
    Autrement dit, j'aimerai qu'à travers mon script python, celui me demande une date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jour = raw_input('jour (AAAA-MM-JJ):')
    Si je spécifie "2013-09-08", le script me récupère en amont tous les logs de la journée du 2013-09-08 sans être obligé de télécharger le log en entier (>100Mo)

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    readline() est là pour ça.

    Tu peux aisément te faire un itérateur, exemple:
    (Je n'ai pas de fichier log sous la main, mais c'est pareil)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    # -*- coding: utf-8 -*-
     
    FILE = '/home/vincent/g9n/GPSout.gpx'
     
    def get_lines():
        inf = open(FILE, 'r')
        stream = inf.readline
        while 1:
            l = stream()
            if not l:
                break
            if '<name>track' in l:
                yield l
        inf.close()
     
    for line in get_lines():
        print line
    Simple, rapide et le fichier n'est pas chargé en mémoire.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Par défaut
    Bonjour VinsS,
    J'ai des notions en prog, aucune en python mais là j'ai l'impression que ton bout de code ne correspond pas à ce que je souhaite...
    Il est question ici de récupérer une partie d'un fichier log distant sans chargement total du fichier.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par Tchupacabra Voir le message
    Il est question ici de récupérer une partie d'un fichier log distant sans chargement total du fichier.
    C'est exactement ce que fait ce code exemple, il ne retourne que les lignes du fichier qui répondent à un (des) critère(s) sans charger l'entièreté en mémoire. Bref, ce que tu demande.

Discussions similaires

  1. Supprimer une partie d'un fichier
    Par onet dans le forum Linux
    Réponses: 2
    Dernier message: 05/01/2007, 19h13
  2. [DOM] Récupérer une partie d’un fichier HTML
    Par fadex dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/01/2007, 12h30
  3. Awk extraire une partie d'un fichier
    Par titexe dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2006, 11h54
  4. [VB6]Lire une partie d'un fichier .txt
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 02/05/2006, 20h49
  5. [VB]recherche dans une partie d'un fichier texte
    Par malhivertman1 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/01/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo