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 :

Commande Dos dans Python


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut Commande Dos dans Python
    Bonjour tout le monde,
    Je m'excuse à l'avance du spam qui va suivre.

    J'ai un petit problème concernant l'exécution une commande dos sous python :

    J'aimerais une liste de tous les dossiers et fichiers sur mon profil windows mais en faisant la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import os
     
    var = r"C:\users\monpc"
    fichier = r"C:\Users\monpc\Documents\python\fichier2.txt"
    os.system(f"dir /b/s/a- {var} >>{fichier}")
    Dans le fichier de sortie fichier2.txt on voit que le processus marche par contre j'ai des dossiers qui se répètent en boucle comme par exemple :
    C:\users\monpc\AppData\Local\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Application Data\Google\Chrome\User Data\Default\Code Cache\
    1)Je ne comprends pas pourquoi Application Data se répète comme cela. Cela vous dit quelque chose svp?
    2) Je suis ouvert à une autre solution pour faire cette action. Mais j'aimerais bien comprendre pour le premier point...

    Merci par avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par Nooboutin Voir le message
    1)Je ne comprends pas pourquoi Application Data se répète comme cela. Cela vous dit quelque chose svp?
    Comparez la sortie avec la même commande DOS exécutée depuis un terminal permettrait déjà de savoir si Python y est (ou pas) pour quelque chose...
    Et s'il n'y est pour rien, c'est que ça vient de votre disque dur...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Comparez la sortie avec la même commande DOS exécutée depuis un terminal permettrait déjà de savoir si Python y est (ou pas) pour quelque chose...
    Et s'il n'y est pour rien, c'est que ça vient de votre disque dur...

    - W
    Hello wiztricks, déjà merci d'avoir répondu aussi rapidement.
    Oui désolé j'aurais dû le préciser. En passant directement par CMD cela fonctionne parfaitement. J'ai un fichier de sortie qui fait à peine 5Mo. Mais sur python ces répétitions dont j'ai parlé plus haut font grimpé les Mo à plus de 500(et encore je suis obligé kill le script pour pas grimper plus haut..) Du coup le problème vient effectivement de Python...
    As-tu une idée?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Essayez de voir si le problème persiste avec subprocess.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    hello,
    moi je n'ai pas ton problème en lançant la commande sous Python. N'aurais-tu pas un raccourci ou lien parasite dans un des chemins balayés ?
    Il faudrait peut être aussi mettre le fichier de sortie en dehors des répertoires balayés.
    Enfin on ne doit plus dire commande dos mais commande de console Windows. Le dos c'est terminé ! dans tous les O.S windows moderne il n'existe plus .

    Ami calmant, J.P

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Même problème avec subprocess. J'ai trouvé d'où venait le problème. Voir message que je vais poster plus bas. Merci en tout cas t'as assuré.

    Citation Envoyé par jurassic pork Voir le message
    Hello jurassic pork (je kiff ton pseudo )
    Pour DOS c'est plus rapide à écrire mdr. J'ai mis le fichier de sortie en dehors des éléments balayés et même problème. C'est pas une histoire de lien parasite car sous CMD pas de problème et sur un autre langage de prog pas de problème non plus. Si c'était un problème de raccourci cela ne fonctionnerait pas en aucun cas je pense.
    J'ai trouvé la solution voir message plus bas. Merci à toi aussi en tout cas d'avoir été force de propositions vraiment.

    Je ne sais pas si c'est normal (j'ai peut-être ma petite idée mais je suis débutant je préfère ne pas dire trop de bêtises) mais en compilant le .py en .exe cela fonctionne parfaitement. Je ne sais pas si c'est à cause d'une histoire de variable d'environnement Comspec ou quoi mais en tout cas tout est ok maintenant...
    Merci encore à tous en tout cas!

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    hello,
    ce que tu peux essayer c'est ce script (modifier les chemins si nécessaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
    import subprocess
    os.system('cmd.exe /c set > cmdset.txt')
    os.system('set > set.txt')
    var = r"C:\users\lcm"
    fichier1 = r"C:\Users\moni\Documents\python\fichier1.txt"
    fichier2 = r"C:\Users\moni\Documents\python\fichier2.txt"
    fichier3 = r"C:\Users\moni\Documents\python\fichier3.txt"
    os.system(f"dir /b/s/a- {var} > {fichier1}")
    os.system(f'cmd.exe /c "dir /b/s/a- {var}" > {fichier2}')
    with open(fichier3, "w") as outfile:
        subprocess.run(f'cmd.exe /c dir /b/s/a- "{var}" ', stdout=outfile)
    la première commande utilise explicitement l'interpréteur de commande cmd et liste les variables d'environnement dans cmdset.txt
    la deuxième commande utilise directement set et liste les variables d'environnement dans set.txt
    les troisième, quatrième, cinquième commande utilisent dir de différentes manières.
    Chez moi j'ai le même résultat pour les commandes 1 et 2 et les mêmes résultats pour les commandes 3,4 et 5.
    Attention aussi à l'encodage des fichiers de sortie (surtout à cause des caractères accentués). Les commandes vont sortir des fichiers avec l'encodage en cours de la console windows. Chez moi c'est OEM850 . Je ne sais pas comment tu vas exploiter tes fichiers txt mais l'OEM850 ce n'est pas de l'ANSI ou de l'UTF8.

    Ami calmant, J.P

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Salut jurassic pork,
    Les trois commandes donnent le même problème. ( Oui j'ai bien pensé à la gestion du type d'encodage merci quand même de me l'avoir rappelé)
    Pour l'instant la solution de la compilation me va très bien. Je mettrai sûrement du temps à répondre aux autres propositions des compères sur le forum mais n'hésitez pas quand même. Merciii beaucoup

  9. #9
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    sinon il y a peut être une solution en fonctions python pour lister les répertoires sous-répertoires et fichiers par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    listOfFiles = list()
    for (dirpath, dirnames, filenames) in os.walk(var):
        listOfFiles += [os.path.join(dirpath, dir) for dir in dirnames]
        listOfFiles += [os.path.join(dirpath, file) for file in filenames]
    with open(r"C:\Users\lcm\Documents\python\fichier4.txt", "w") as opfile:
        opfile.write("\n".join(listOfFiles))
    il semblerait qu'il y ait plus de lignes que dans les autres méthodes

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Hello jurassic pork,

    Rien ne se passe de mon côté. J'ai bien mis le dossier à analyser en tant que var, mais rien...Au pire on laisse tomber pour l'instant. J'ai posté un autre sujet sur le forum. Si t'as une idée je suis preneur
    A++

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    hello,
    c'est bizarre qu'il ne se passe rien chez toi. Quelle version de python utilises-tu ?

    voici le script complet qui fonctionne chez moi en python 3.8.5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import os
    var = r"C:\Users\jp"
    listOfFiles = list()
    for (dirpath, dirnames, filenames) in os.walk(var):
        listOfFiles += [os.path.join(dirpath, dir) for dir in dirnames]
        listOfFiles += [os.path.join(dirpath, file) for file in filenames]
    with open("C:/Users/jp/Documents/python/fichier4.txt", "w") as opfile:
        opfile.write("\n".join(listOfFiles))
    Ami calmant J.P

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2021
    Messages : 38
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Quelle version de python utilises-tu ?
    3.6

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    La seule chose qui soit surprenante ici est que le PO ne visualise pas les différents "Application Data" imbriqués depuis l'explorateur de fichiers ou avec la commande DIR passée à la console: Python ne fait qu'afficher les lignes remontées par la commande DOS passée.

    Si on cherche un peu sur Internet, ce problème peut être provoqué par un virus ou des programmes de backup interrompus violemment.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    hello,
    comme le suggère wiztricks, il se peut que ton système de fichiers soit corrompu et cela peut entraîner des dysfonctionnements dans la gestion des fichiers. Essaie de réparer ton système de fichier sur C: . Commande cmd en tant qu'administrateur :
    chkdsk /F C: . Un redémarrage est nécessaire pour effectuer l'opération car le système de fichier c: est occupé.
    D'autre part j'ai revérifié mon code avec un os.walk et je trouve la même chose qu'avec le dir.
    Ami calmant, J.P

Discussions similaires

  1. [Python 2.X] Utiliser commande dos avec python sur un executable dans dossier script
    Par Schamm dans le forum Général Python
    Réponses: 7
    Dernier message: 21/07/2016, 11h47
  2. Réponses: 4
    Dernier message: 20/04/2011, 11h20
  3. Réponses: 3
    Dernier message: 22/10/2004, 12h04
  4. [TP]Peut-on mettre un commande dos dans le prog?
    Par pierre olmes dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 24/05/2003, 22h28
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

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