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

Langage PHP Discussion :

peut-on exécuter une commande python à partir de PHP ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 427
    Points : 880
    Points
    880
    Par défaut peut-on exécuter une commande python à partir de PHP ?
    bonjour,

    j'ai besoin d'exécuter en python (sur un serveur externe) une commande qui n'existe pas en PHP.
    Ce sera modéré, si j'ai un delay d'exécution de 5s ça ira.

    En fait dan python il y a la commande/librairie Dateutil qui fait des choses qui n'ont pas d'équivalent en PHP. (croyez-moi j'ia cherché la libraiire miracle, aucune piste, même le calendar de google ne le fait pas).

    Par exemple, lister les dates suivant une règle (1 fois tous les mardi pendant 1 mois).
    Dateutils sous python fait ça admirablement BIEN !
    peux-ton l'exploiter en php ?
    un moyen de faire une requêtre http/curl, d'envoyer une commande shell vers une ip pour lancer la commande python et récupérer le résultat dans php ?

    merci de vos idées, tuyaux...orientation...

    ps : mon système host est un lamp/wamp sur lequel je ne peux pas installer python, donc il faut que le serveur python soit externe et accessible via internet.

  2. #2
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Salut,
    on doit pouvoir faire ça avec

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par ma5t3r Voir le message
    Salut,
    on doit pouvoir faire ça avec
    A priori python n'est pas sur le serveur hebergeant php , donc exec, shel_exec ou system ne fonctionneront pas ici.

    Par contre c'est pas parce que tu as pas une fonction tout fait en PHP que c'est pas possible de faire ce que tu veux. Ca n'a aucun sens de faire ca en python encore plus sur un serveur distant. Sinon ca veux dire qu'il faut mettre en place une api coté python pour que php puisse venir interroger le code ...
    Que veux t ufaire exactement que soit disant php ne sait pas faire ?

    Exemple , tous les mardis d'un mois donné :

    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
    $year = 2020;
    $month = 6;
    $start = new DateTime("first tuesday of $year-$month");
    $interval = new DateInterval('P7D');
    $end = new DateTime("last day of $year-$month");
    $end->setTime(0,0,1); // pour inclure la date de fin
    $range = new DatePeriod(
            $start,
            $interval,
            $end
        );
     
    foreach ($range as $tuesday ) {
        echo $tuesday ->format("d/m/Y");
        echo '<br />';
    }

  4. #4
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Autant pour moi.
    Quand on lit mal l'énoncé, on finit par répondre à côté.

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Il y aussi la librairie Carbon https://carbon.nesbot.com/docs/ qui est une extension de la classe Datetime qui te permet à peu près tout ce que tu veux avec les dates.

  6. #6
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 427
    Points : 880
    Points
    880
    Par défaut
    Citation Envoyé par grunk Voir le message
    A priori python n'est pas sur le serveur hebergeant php , donc exec, shel_exec ou system ne fonctionneront pas ici.

    Par contre c'est pas parce que tu as pas une fonction tout fait en PHP que c'est pas possible de faire ce que tu veux. Ca n'a aucun sens de faire ca en python encore plus sur un serveur distant. Sinon ca veux dire qu'il faut mettre en place une api coté python pour que php puisse venir interroger le code ...
    Que veux t ufaire exactement que soit disant php ne sait pas faire ?

    Exemple , tous les mardis d'un mois donné :

    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
    $year = 2020;
    $month = 6;
    $start = new DateTime("first tuesday of $year-$month");
    $interval = new DateInterval('P7D');
    $end = new DateTime("last day of $year-$month");
    $end->setTime(0,0,1); // pour inclure la date de fin
    $range = new DatePeriod(
            $start,
            $interval,
            $end
        );
     
    foreach ($range as $tuesday ) {
        echo $tuesday ->format("d/m/Y");
        echo '<br />';
    }
    je vous remercie pour votre code mais il est basé sur mon exemple, qui n'est qu'un exemple.
    Regardez les multiples merveilles de dateutils (rubrique exemple) :
    https://dateutil.readthedocs.io/en/stable/rrule.html

    j'ai besoin de faire varier la f'réquence, la borne début, la borne fin, le régularité (1fois sur X), prendre en compte les jours fériés. ça n'existe pas en PHP.
    Vu que sur un serveur distant, je peux faire du python en shell via linux. ya pas moyen de récupérer la sortie shell (cron ou Pie, je sais plus le terme ça remonte à mes cours de10ans) d'une commande qui serait lancée par PHP ?

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Je te le redis, regarde la librairie Carbon avant de te lancer dans des solutions aussi alambiquées. On ne sait toujours pas exactement ce que tu veux faire mais suis prêt à miser 50 balles que Carbon répond à ton besoin de manière simple.
    Les CarbonPeriod semblent être des objets qui permettent de faire simplement ce que tu souhaites https://carbon.nesbot.com/docs/#api-period

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Pour répondre à ta question puisque tu ne veux pas d'une solution PHP.
    Ssh sur le serveur distant via PHP , lance ta commande python et lit le retour.
    Mais je maintien que c'est ridicule comme solution (sans parler de la sécurité et de la robustesse)

    Tous les exemples dans le lien que tu donnes sont faisables sans problème avec datetime,dateinterval et dateperiod ou comme le dit Spartacusply avec Carbon

  9. #9
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 427
    Points : 880
    Points
    880
    Par défaut
    Citation Envoyé par Spartacusply Voir le message
    Il y aussi la librairie Carbon https://carbon.nesbot.com/docs/ qui est une extension de la classe Datetime qui te permet à peu près tout ce que tu veux avec les dates.
    merci, je n'avais pas vu cette réponse avant mon précédent message.
    il sembleait que la parti Carbon Periode puisse m'être utile. je vais tester...
    https://carbon.nesbot.com/docs/#api-period

    Par contre, à première lecture elle manque bcp de fonctionnalité :
    impossibilité de lister 5 mardis dans une période en excluant les weekend et jour fériés , du coup ça nécesseritait un post-traitement.
    Imagine tu dois prévoir les dates de nettoyage d'un hopitaux sachant que ça ne peut être qu'un mardi matin 1 fois sur 2 entre telle et telle date.
    DateUtil/Rrule a la notion de step, de recurrence, de leap year que je ne vois pas dans la doc de Carbon....(parcourue, pas encore lu intégralement)

  10. #10
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    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
    //Set la langue FR (important)
    Carbon::setLocale('fr_FR');
     
    //1 mardi matin 1 fois sur 2 entre telle et telle date
     
    //Date de début (peut être n'importe quoi comme date)
    $dateStart = Carbon::parse('2020-06-18');
    //Date de fin, peut être n'importe quoi, ici j'ajoute un an à la date de début
    $dateEnd = $dateStart->clone()->addYear();
    //On va au mardi (0 = lundi, 1 = mardi)
    $dateStart->weekday(1);
     
    //Un mardi sur 2 = un interval de 2 semaines
    $carbonPeriod = new CarbonPeriod($dateStart, '2 weeks', $dateEnd);
     
    //Et voilà tu as tout tes mardis sur lesquels tu peux itérer avec foreach par exemple,
    // ou récupérer sous forme de tableau avec ->toArray() par exemple
    Tu as aussi l'utilisation setRecurrence, des filters qui te permettent de faire ce que tu souhaites à priori. Bref, je te laisse regarder la doc, tu devrais y trouver ton bonheur.
    Sauf pour la gestion des jours fériés, a priori je ne vois aucune fonction dans Carbon pour les traiter directement.

    Sache que tu peux étendre proprement Carbon avec les macros https://carbon.nesbot.com/docs/#api-macro, et que tu peux te débrouiller pour lister les jours fériés français avec l'utilisation de easter_date pour Pâques mais ça nécessitera en effet un dev de ta part pour ça.

  11. #11
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Pour les jours férié il y'a une bonne base ici : https://github.com/grunk/Pry/blob/ma...Date/Ferie.php

    Je l'ai pas retesté depuis longtemps mais a l'époque ça faisait le taf

Discussions similaires

  1. Exécuter une commande à partir d'un texte - VB
    Par Alex08190 dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/02/2015, 17h31
  2. Réponses: 4
    Dernier message: 04/05/2009, 16h33
  3. Peut on mettre une commande linux avec python
    Par specimen35 dans le forum Général Python
    Réponses: 2
    Dernier message: 20/12/2007, 16h06
  4. [VB.NET] exécuter une command Dos à Partir de Vb.Net
    Par Khalid.bounouader dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/12/2006, 14h05
  5. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11

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