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 :

écriture dans un fichier


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut écriture dans un fichier
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for arg in liste_portOuvert:
            	print arg,":",socket.getservbyport(arg)
    ce bout de code m'affiche les ports ouverts par exemple :

    21 : ftp
    22 : ssh
    53 : domain
    ...

    et je voudrais écrire ce résultat dans un fichier texte mais je coince

    merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Bonjour,

    La faq ne m'aide pas beaucoup j'avais déjà regardé

    sinon j'avais déjà testé de mettre le résultat dans une variable et après de l'écrire dans un fichier texte mais il m'affiche soit le 1ere élément soit le dernier (ici le dernier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for arg in liste_portOuvert:
            	print arg,":",socket.getservbyport(arg)
    		result = arg,":",socket.getservbyport(arg)
    		print result
    		filout = open('listeOuverte.txt','w')
    		result=str(result)
    		filout.write(result)	
    		filout.close()
    il m'affiche

    (10000, ':', 'webmin') et non le début.

    merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Et bien c'est parce qu'il n'y a rien que (10000, ':', 'webmin') dans liste_portOuvert
    Mais comme tu donnes les renseignements au compte-gouttes, on ne peut pas en dire plus puisqu'on ne sait pas comment tu crées liste_portOuvert

    En outre, il faudrait savoir:
    c'est soit print (arg,":",socket.getservbyport(arg))
    pour afficher (10000, ':', 'webmin')
    soit print arg,":",socket.getservbyport(arg)
    pour afficher 21 : ftp

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    au début la liste_portOuvert contient une liste vide donc liste_portOuvert[]

    on affiche les ports ouverts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if connex == 0:
    			liste_portOuvert.append(port)
    			print "Port %s ouvert"%(port)
    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
    19
    20
    21
    22
    #programme principal
    if __name__ == "__main__":
    #on scanne chaque port de liste_de_port et on ajoute le résultat du scan dans la liste (liste_de_port étant une liste de port)
    	liste=[]
        	for arg in liste_de_port:
          		scan=Scan(arg)
          		scan.start()
          		liste.append(scan)
    #on récupère les ports ouverts et on les affiche avec le protocole qui y tourne avec la méthode getservbyport()
        	for scan in liste:
          		scan.join()
     
    	#permet de trier les éléments de la liste 
        	liste_portOuvert.sort()
        	for arg in liste_portOuvert:
            	#print arg,":",socket.getservbyport(arg)
    		result = arg,":",socket.getservbyport(arg)
    		print result
    		filout = open('listeOuverte.txt','w')
    		result=str(result)
    		filout.write(result)	
    		filout.close()
    sur la console :
    Port 21 ouvert
    ...

    (21, ':', 'ftp')
    (22, ':', 'ssh')
    ...
    (10000, ':', 'webmin')

    dans listeOuverte.txt :

    (10000, ':', 'webmin')

    voilà

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le problème est qu'à chaque itération tu rouvres le fichier en écriture, ce qui a pour effet de l'effacer, donc il ne reste que ce qui a été écrit lors de la dernière ouverture, c'est-à-dire la dernière ligne.
    Sors l'instruction d'ouverture de la boucle.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Je ne comprends pas tout bien, mais est-ce qu'il n'y aurait pas une erreur de nom ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        	liste.sort()()
        	for arg in liste:
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        	liste_portOuvert.sort()()
        	for arg in liste_portOuvert:

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Ah oui bien sûr ! oiffrig a raison.
    Ouvrir en 'w' écrase toutes les donnees précédemment situées dans le fichier.
    Si tu veux faire des ajouts en FIN de fichier il faut ouvrir en 'a', ou alors faire comme dit oiffrig


    Mais peut être que le nom n'est pas bon aussi.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    merci je suis resté dans la boucle en modifiant le w en a et impect il me rajoute bien les éléments à la suite

    bonne journée et encore merci

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Pas terrible du tout, d'ouvrir et fermer un fichier pour chaque tour d'une boucle. Il vaudrait mieux faire comme a dit oiffrig, sortir l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filout = open('listeOuverte.txt','w')
    dela boucle. Sinon le programme passe du temps à ouvrir et fermer un fichier, c'est à dire à créer et détruire un pointeur positionné dans ce fichier (positionné par l'ouverture à la fin du fichier si mode 'a').

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    En fait quand je sors de la boucle il me met aussi le dernier résultat pas trop compris pourquoi.

    sinon oui c'est vrai tu as raison mais bon c'est un petit fichier donc ça ne se voit pas trop. Ce que j'ai fais c'est rajouter au début

    filout = open('listeOuverte.txt','w')
    filout.write('')

    pour écraser les éléments d'avant vu que si tu relances la fonction ça se rajoute à la suite.
    Ce n'est pas très joli en effet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2005, 11h57
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  3. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

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