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 :

Capturer la sortie d'un process


Sujet :

Python

  1. #1
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut Capturer la sortie d'un process
    Bonjour,

    Je me demandais s'il était possible en python de pouvoir capturer la sortie standard d'un process en cours afin d'en surveiller le fonctionnement. (Sous Linux)

    Les seules informations que je trouve sur Internet sont relatives au lancement d'un sous-process or ce n'est pas ce que je recherche vu que le process tourne déjà.

    Le but est de capturer respectivement la sortie standard d'un ou plusieurs serveurs de jeux qui sont lancés avec SCREEN et leur sortie dirigée vers des pseudo-terminaux: pts/0 pts/1 ..

    Est ce que quelqu'un a une idée?

  2. #2
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Un exemple tiré de la doc :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    process = subprocess.Popen(['echo', 'Hello World!'], shell=False, stdout=subprocess.PIPE)
    print process.communicate()
    Affiche Hello World!

  3. #3
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    Oui mais non, ... Je dois pouvoir venir me "greffer" à la sortie d'un process déjà lancé et qui n'est pas question d'interrompre ou de lancer dans le script python.

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    ca devrait faire l'affaire :
    http://docs.python.org/library/pty.html#module-pty

    ou alors voir du coté du module os qui implante un os.openpty()

    bon courage

  5. #5
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    D'après ce que je sais ca n'est pas possible. Une fois le processus lancé, lui seul a la charge des descripteurs qu'il a ouvert.
    A confirmer.

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    C'est exact.

    Si tu veux récupérer la sortie du process, tu peux aussi le lancer de sorte à rediriger sa sortie vers un fichier (sur le disque, en ram, ou encore un device sous unix, il y a des techniques pour faire ça).

    Puis en python, tu consommes ce fichier.
    Find me on github

  7. #7
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    Je vais étudier cette possibilité alors, merci.

    Sinon, je m'y connais pas assez en Python, mais est ce que deux scripts python peuvent communiquer entre eux via des évènements? (un comme les applications windows)

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par ghost942 Voir le message
    ...mais est ce que deux scripts python peuvent communiquer entre eux via des évènements? (un comme les applications windows)
    Des scripts Python s'exécutent dans des VM Python hébergées dans des process de l'OS (Windows, Linux)...
    Ils (les scripts) peuvent utiliser les fonctionnalités de communications entre processus (IPC) spécifiques à l'OS (win32com), plus génériques comme socket et autres, ou emballées dans une sauce Python: multiprocessing,...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par jblecanard Voir le message
    Si tu veux récupérer la sortie du process, tu peux aussi le lancer de sorte à rediriger sa sortie vers un fichier (sur le disque, en ram, ou encore un device sous unix, il y a des techniques pour faire ça).
    Il me semble que ghost942 a spécifier screen. Dans la limite de mes compétences je pense que cette solution n'est pas possible (puisque c'est screen qui la gère).
    Pourquoi utiliser screen ? Un simple script shell est bien plus gérable (et même bien plus en Python).

    Avis perso.
    Merci d'utiliser le forum pour les questions techniques.

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Screen n'est qu'un outil pour afficher plusieurs pseudo-terminaux dans un seul terminal. Si ghost942 n'a pas la main sur la manière dont est lancé le processus, ça risque fort de ne pas être possible.

    D'ailleurs, ça ressemble à une tentative de hackage ce sujet
    Find me on github

  11. #11
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    En fait, on utilise SCREEN car on lance un script (lancement d'outils et lancement du serveur de jeux). La machine héberge de multiples serveurs de jeux.

    Donc il faut que le serveur continue à tourner après la fermeture de la console distante. (d'ou SCREEN)

  12. #12
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Screen n'est qu'un outil pour afficher plusieurs pseudo-terminaux dans un seul terminal. Si ghost942 n'a pas la main sur la manière dont est lancé le processus, ça risque fort de ne pas être possible.

    D'ailleurs, ça ressemble à une tentative de hackage ce sujet
    Non non, pas de hack

    Seulement je ne suis pas utilisateur root de la machine, seulement utilisateur de ma section (on utilise plusieurs types de serveurs de jeux).

    Je peux configurer le serveur de jeux pour qu'il ponde un fichier log en sortie (la même chose qu'il sort en tty en fait) mais sincèrement, je ne vois pas comment capturer ce flux "ligne par ligne". Lire la totalité du fichier log pour capturer la dernière ligne n'est pas envisageable car on parle de gros fichiers logs (5 à 10Mo quotidien) C'est pour çà que je voulais m'orienter vers la sortie TTY.

    Actuellement j'utilise des scripts LUA car le serveur offre cette fonctionnalité là (il trap les événements ce qui me permet d'interagir avec le serveur) mais il a une petite tendance à oublier par ci par la des évènements et génère des gros lags lors de traitements un peu lourd (ce qui est regrettable pour joueur de manière fluide). Bref, je pensais qu'utiliser Python serait une bonne solution pour externaliser les traitements et libérer un peu de charge pour le serveur: lire le flux console et agir par commandes rcon.

    En gros faire un bot de controle. Il existe déjà BigBrotherBot (écrit en Python) mais il n'est accessible pour le mode de jeux qu'on utilise. D'ailleurs j'ai regardé un peu le source mais comme je débute en Python, je n'ai pas trouvé la partie qu'il utilise pour capturer les informations du serveur (moteur quake). C'est une usine à gaz

  13. #13
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Il devrait y avoir moyen de se positionner à la fin du fichier de log et de faire une lecture bloquante (comme un tail -f). Voir par exemple: http://nxsy.org/tail-in-python

  14. #14
    Membre du Club Avatar de ghost942
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 112
    Points : 50
    Points
    50
    Par défaut
    @dividee: Ca marche! J'intercepte bien l'activité du fichier log. Merci!!

    Merci aux autres aussi pour vos réponses

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par ghost942 Voir le message
    Je peux configurer le serveur de jeux pour qu'il ponde un fichier log en sortie (la même chose qu'il sort en tty en fait) mais sincèrement, je ne vois pas comment capturer ce flux "ligne par ligne". :
    Ha bah voilà, si tu nous caches les infos essentielles aussi
    Find me on github

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

Discussions similaires

  1. [PowerShell] Comment capturer un sortie dans un fichier ?
    Par max-mag dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 03/01/2013, 14h35
  2. Capturer la sortie d'un script javascript
    Par kegilko dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 04/03/2012, 17h19
  3. Capture de sortie standard
    Par Vantrax dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2009, 14h56
  4. Capturer la sortie haut-parleurs
    Par fab56 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 11/03/2008, 18h08
  5. [Process] recuperer entree et sortie d'un programme externe
    Par Gob4 dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 22/09/2005, 18h18

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