Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/08/2014, à 22:43

toutafai

aide python telecharger fichier dont le nom est partielement connu

Bonsoir,

Je vais être appeler dans le cadre de mon travail à gérer des mises à jour logiciel, passionnant, non ??? roll

La personne qui fait cela pour le moment fait cela "a l'ancienne" :

Il se connecte sur le site, regarde si une mise a jour est dispo, si oui, il télécharge le fichier dont le nom change régulièrement mais que partiellement (il est est toujours nommé trxxxxx7_64.exe). Puis il le sauvegarde dans un dossier réseau.

J'aimerais automatiser cela avec un script python car il faut que cela s’exécute dans un environnement microsoft :-(
Je connais pratiquement pas python. j'aurais donc besoin d'une (ou plusieurs cool ) bonne âmes pour me donner une bonne trame de départ ou pour me donner quelques ligne de code,  cela me serait d'une grande aide.

mon petit cahier des charges correspondant a mon besoin :

Script en v1
- télécharger le fichier nommé trxxxx7_64.exe
- le renommer en 1_7_64.exe du le copier dans dans un dossier réseau (de la, il sera repris dans un bon vieux batch windows, ça je connais cool )

Script en v1.1

on vérifie avant de télécharger si on a pas déjà la version la plus récente du fichier (le fichier pesant tout de même dans les 400 Mo yikes )


D'avance merci pour le temps que vous m'accorderez.


Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).

Hors ligne

#2 Le 20/08/2014, à 23:38

wido

Re : aide python telecharger fichier dont le nom est partielement connu

je m'abonne big_smile

Hors ligne

#3 Le 21/08/2014, à 21:35

toutafai

Re : aide python telecharger fichier dont le nom est partielement connu

je progresse j'en suis au cours 3 de la serie pyhton FullCircle big_smile ...mais encore loin de l'objectif roll


Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).

Hors ligne

#4 Le 22/08/2014, à 03:45

nesthib

Re : aide python telecharger fichier dont le nom est partielement connu

Il manque une information primordiale dans ta question. Comment détermines-tu le nom de fichier exact ? Y a-t-il une page web ? Un partage FTP ? Selon le cas la réponse peut varier.
Une autre chose pour ta version avancée, comment sais-tu que tu as déjà téléchargé un fichier puisque tu le renommes ? Veux-tu aussi vérifier l'intégrité du fichier (ex. somme de contrôle) ?

Une solution pour le cas où tu connais l'URL :

#!/usr/bin/python

import os
import urllib

LAST_EXEC_FILE = '/tmp/last_exec'
DEST_FOLDER = '/tmp'

URL = 'http://lien.vers/le/fichier.exe'    # à remplacer par une fonction qui détermine l'URL
exec_name = URL.rsplit('/', 1)[1]    # on récupère le nom de l'exécutable

# fonction pour comparer avec le nom du dernier fichier téléchargé (dans LAST_EXEC_FILE)
def is_last(name):
    with open(LAST_EXEC_FILE) as f:
        last = f.read().rstrip()
    return name == last

# s'il n'y a pas de fichier LAST_EXEC_FILE ou que le dernier fichier téléchargé n'est pas le plus récent, on lance le téléchargement
if not (os.path.exists(LAST_EXEC_FILE) and is_last(exec_name)):
    urllib.urlretrieve (URL, os.path.join(DEST_FOLDER, '1_7_64.exe'))
    # on garde en mémoire le nom d'origine du dernier fichier téléchargé
    with open(LAST_EXEC_FILE, 'w') as f:
        f.write(exec_name)

C'est vraiment tout simple, même pas une version 1 ou 1.1, plutôt 0.01 wink

Si tu veux comprendre en détail ce code, installe ipython et lance le code ligne par ligne (ou bloc par bloc) et essaie de décomposer les différents éléments.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 22/08/2014, à 07:05

melixgaro

Re : aide python telecharger fichier dont le nom est partielement connu

salut,

si tu testes dans ipython, tape

%autoindent

avant le copié-collé bloc par bloc wink


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#6 Le 22/08/2014, à 21:51

toutafai

Re : aide python telecharger fichier dont le nom est partielement connu

Bonsoir a tous et merci pour vos réponses,

@nesthib : un grand Merci a toi pour ton travail ! wahoo, j'imagine qu'avec cela et tes conseils je pourrais moi aussi un jour "pondre" lol du code comme cela, mais pour l'instant le padawan que je suis devra attendre big_smile

Pour répondre a tes question judicieuses :
- il s'agit des mises a jour d'anti-virus symantec, je ne peux que les télécharger en http ou en ftp (sous réserve que le ftp me soit autorisé dans la boite) que l'on peut télécharger ici pour le fichier de definitions nommé en AAAAMMJJ*v5i64.exe et ici pour le fichier ips nommé AAAAMMJJ*IPS_IU_SEP.exe

pour savoir si le fichier a changé je pensais simplement récupéré dans une variable le nom du dernier fichier téléchargé (avant de le renommer), puis de faire une comparaison avec celui sur le site pour déclencher ou non le téléchargement

j'aurais pas le temps de tester ce week, mais je m'y met dès lundi. je vous tiens informé de la suite, encore merci et bon week !

@melixgaro : merci pour l'astuce !


Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).

Hors ligne

#7 Le 24/08/2014, à 02:08

nesthib

Re : aide python telecharger fichier dont le nom est partielement connu

Tu peux facilement extraire l'url de la page web avec le code suivant :

import re
import urllib
from bs4 import BeautifulSoup

# on récupère la page
page = urllib.urlopen('http://www.symantec.com/security_response/definitions/download/detail.jsp?gid=sep').read()
# on analyse le HTML avec BeautifulSoup et le parseur lxml (car la page est mal formatée…)
soup = BeautifulSoup(page, 'lxml')
# on récupère le premier lien qui corresponde à 00000000*v5i64.exe
url = soup.find(lambda tag: tag.name=='a' and 'href' in tag.attrs and re.match('http://.*\d{8}[^/]+v5i64.exe', tag.attrs['href']))['href']

Tu dois installer les paquets python-bs4 et python-lxml.

Une version plus simple (et qui ne requiert ni BeautifulSoup ni lxml) mais moins propre (ne se base pas sur les balises HTML) :

import re
import urllib
# on récupère la page
page = urllib.urlopen('http://www.symantec.com/security_response/definitions/download/detail.jsp?gid=sep').read()
# on cherche l'url
url = re.findall('(?<=href=")http://definitions.symantec.com/defs/\d{8}[^"/]+v5i64.exe(?=")', page)[0]

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#8 Le 24/08/2014, à 13:34

toutafai

Re : aide python telecharger fichier dont le nom est partielement connu

ok, effectivement j'avais déjà croisé la solution "BeautifulSoup et le parser" mais j'étais loin de l'avoir compris, "padawanisme oblige"  lol

Merci pour ton active participation et comme dit plus haut, je test cela dès la semaine prochaine, je te tiens au courant.

Bonne fin de week !


Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).

Hors ligne