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

Interfaçage autre langage Python Discussion :

Enregistrer automatiquement les commandes de sortie du terminal dans un fichier texte


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    Enregistrer automatiquement les commandes de sortie du terminal dans un fichier texte
    Bonjour,

    je souhaite introduire dans un code python une commande bash qui me permet de sauvegarder dans un fichier texte toutes les commandes qui s'affichent dans le terminal.
    J'ai donc introduit cette ligne . os.system("script file.txt")

    Le problema, si j'ai bien compris, est qu'il faut a un moment stopper cette commande (a l'aide de CONTROL+C) pour creer le fichier or je ne sais pas comment je peux introduire ceci dans mon code pour que ca se fasse automatiquement.

    Le but etant de pouvoir afficherdans une interface graphique tout ce qui apparait dans le terminal.

    Merci d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Expert éminent sénior
    Salut,

    Citation Envoyé par laoren Voir le message
    Le problema, si j'ai bien compris, est qu'il faut a un moment stopper cette commande (a l'aide de CONTROL+C) pour creer le fichier or je ne sais pas comment je peux introduire ceci dans mon code pour que ca se fasse automatiquement.
    Pas sûr d'avoir tout compris mais vous pouvez expédier un CTRL-C au process qui exécute "script file.txt" modulo de l'avoir lancé avec subprocess.Popen et d'utiliser .send_signal.

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

  3. #3
    Futur Membre du Club
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Pas sûr d'avoir tout compris mais vous pouvez expédier un CTRL-C au process qui exécute "script file.txt" modulo de l'avoir lancé avec subprocess.Popen et d'utiliser .send_signal.

    - W
    Merci pour votre reponse:

    Mon code est de cette forme.
    subprocess.call("script test.txt", Shell=True) #Je souhaite ici ouvrir un fichier texte qui stocke tous les commandes qui vont s'afficher dans la console

    fonctions python a executer

    subprocess.Popen.send_signal(signal.CTRL_C_EVENT) #Fermeture du fichier

    je pensé que je n'utilise par encore correctement la fonction send_signal le fichier ne se cree pas et une erreur apparait a cause des arguments de la fonction

  4. #4
    Expert éminent
    Salut,

    Je ne vois pas ce que c'est que cette histoire de CTRL+C mais moi j'utilise ceci sans problème:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with open('result.log', 'w') as outf:
        subprocess.Popen(["commande", "arg"], 
                         universal_newlines=True,
                         stdout=outf)

  5. #5
    Futur Membre du Club
    Citation Envoyé par VinsS Voir le message
    Salut,

    Je ne vois pas ce que c'est que cette histoire de CTRL+C mais moi j'utilise ceci sans problème:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with open('result.log', 'w') as outf:
        subprocess.Popen(["commande", "arg"], 
                         universal_newlines=True,
                         stdout=outf)
    Je me suis trompe, il faut executer la commande "exit" ala fin pour indiquer la fin du fichier cree part script. Mais mon code n'a pas l'air d'apprecier cette methode:

    J'ao donc essayer la votre mais il apparait une erreur pour la fonction Popen mais il apparait une erreur : Le fichier specifie ne peut pas etre trouve (je ne vois pas vraiment de quel fichier il s'agit). J'essaye donc de trouver une autre solution.

    Merci pour votre aide

  6. #6
    Expert éminent
    Tu as des messages d'erreur en français ??

    Montre le code que tu as essayé et le traceback d'erreur complet.

    Pour la commande "exit", je ne vois pas le rapport à la question.

  7. #7
    Futur Membre du Club
    Citation Envoyé par VinsS Voir le message
    Tu as des messages d'erreur en français ??

    Montre le code que tu as essayé et le traceback d'erreur complet.

    Pour la commande "exit", je ne vois pas le rapport à la question.
    Tout le projet est efffectue sous PyCharm, ce n4est donc pas le meme terminal que Linux? et donc pas les memes commandes a utiliser?

  8. #8
    Expert éminent
    Le code que je t'ai montré doit fonctionner dans ton cas aussi.

    Je pense que tu l'utilises mal, surtout que tu ne peux pas avoir cette erreur puisque si le fichier n'existe pas, en mode écriture, il est créé.

    Montre ce bout de code et le message d'erreur complet.

  9. #9
    Futur Membre du Club
    Citation Envoyé par VinsS Voir le message
    Le code que je t'ai montré doit fonctionner dans ton cas aussi.

    Je pense que tu l'utilises mal, surtout que tu ne peux pas avoir cette erreur puisque si le fichier n'existe pas, en mode écriture, il est créé.

    Montre ce bout de code et le message d'erreur complet.
    Voici une partie de mon code, ces fonctions etant definies dans une clase correspondant a une fenetre (interface graphique)
    La fonction display_file permet juste de lire le fichier line par ligne pour l'afficher dans mon widget.

    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
     
    def print_results(self):
        try
            execfile("...")
            with open('result.log', 'w') as outf:
                 subprocess.Popen(["commande", "arg"], 
                         universal_newlines=True,
                         stdout=outf)
            self.display_file()
     
        except Exception, e
            self,ui,textBrowser_results.append("EXCEPTION >>>  " + str(e)
     
     
    def display_file(self):
        file = 'results.log'
        file_txt = open(file, 'r')
        linetxt 0 file_txt.readlines() 
        for line in linetxt:
            self.ui.textBrowser_results.append(line)
        file_txt.close()


    Mon ordianteur de travail etant en espagnol, le message d'erreur l'est aussi: EXCEPTION >>> [Error 2]El systemo no puede encontrar el archivo especificado

  10. #10
    Expert éminent
    M'enfin Laoren,

    As-tu une vague idée de ce à quoi sert ceci execfile("...") ?

    Sûrement non, supprime cette ligne alors, c'est elle qui te retourne cette erreur.

    Ensuite il ne faut pas recopier intégralement mon code bien sur, il faut remplacer "commande", "arg"] par ta commande et son ou ses argument(s).

    Note que dans le traitement de l'exception tu as mis des virgules à la place des points.

    Et tu peux simplifier:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def display_file(self):
        with open('results.log', 'r') as inf:
            for line in inf:
                self.ui.textBrowser_results.append(line)

###raw>template_hook.ano_emploi###