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

Shell et commandes GNU Discussion :

Lancer 150 fois différentes commandes


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut Lancer 150 fois différentes commandes
    Bonjour.

    J'ai appris aujourd'hui à lancer des commandes de façon séquentielle avec cmd1 ; cmd2.
    Ça m'est pratique avec mes spiders sous scrapy. Dans la console, en écrivant au clavier les instructions une par une, ça fonctionne très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrapy crawl spider -a arg1=machin -a arg2=bidule ; scrapy crawl spider -a arg1=jain -a arg2=makeba #etc
    Mais comme en pratique j'aimerais lancer 150 fois différentes commandes de façon séquentielle, et je ne m'attarderais à épiloguer sur le pourquoi j'en ai besoin 150 fois.
    J'ai fait un script pour la console bash tel que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    scrapy crawl spider -a arg1=machin -a arg2=bidule ; 
    scrapy crawl spider -a arg1=jain -a arg2=makeba ;
    #etc
    avec 150 fois une instruction proche mais différente.

    Et vous remarquerez qu'il y a des sauts de lignes cette fois contrairement à lorsque je lançais dans la console en écrivant à la main quand je testais. Mais ça me renvoi une erreur propre à scrapy "scrapy crawl [options] <spider>
    crawl: error: running 'scrapy crawl' with more than one spider is no longer supported
    + scrapy crawl spider -a arg1=jain -a arg2=makeba", ce qui signifie clairement que ça ne se fait pas façon séquentielle. Alors concernant les ";" je ne fut pas étonnée quand je lu ceci "Une série de commande peuvent être saisient sur la même ligne; c'est la liaison de commandes ; chaque commande est séparée des autres par un point virgule (";") et chacune est exécutée séquentielement les une après les autres." donc j'ai remplacé les ";" par des "&&" ne voyant pas de contre-indication. Mais j'ai la même erreur lorsque je lance
    .

    Comment puis-je faire des commandes séquentielles dans un script?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    deux options :
    • deux tableaux
    • un fichier

    et une boucle, mais pas la même.

    deux tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    args1=( "ma chin" jain ... )
    args2=( "bi dule" makeba ... )
     
    for n in ${!args1[*]}
    do
       scrapy crawl spiders -a arg1="${args1[$n]}" -a arg2="${args2[$n]}"
    done
    ou,

    un fichier CSV, lu par une boucle while. cf. lire un fichier en shell

    voilà, choisis ton poison
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut Résolu
    Merci, j'ai choisi le premier poison.
    Avec quelques apprentissages sur les conditions ça devrait être encore plus propre, mais ce que je fais là grâce à votre conseil marche bien visiblement. Merci.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    au fait, où sont les données ? car elles existent avant le script, non ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Les données avant le script?
    Pour ma part dans mon scrap je me base sur des données existantes dans ma base de données mais ça n'aurait pas été nécessaire dans d'autres cas de figure de scraping.
    Par exemple si j'avais utilisé 150 adresses e-mails différentes pour me login sur un site, je n'aurais pas eut spécialement besoin de données en amont pour le faire.
    Donc j'ai fait comme vous avez dit, 150 éléments de ce dont j'ai besoin dans chaque tableau.
    Si j'ai mal répondu précisez moi votre question svp.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    je me base sur des données existantes dans ma base de données
    il pourrait alors être préférable d'utiliser la deuxième méthode (boucle while) :
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    SGBDtool 'select...' | while read arg1 arg2; do scrap...; done
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier Avatar de AvySamaj
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 118
    Points : 75
    Points
    75
    Par défaut
    Cela marcherait-il avec mongodb? Car j'utilise que mongo.
    Et rassurez-vous votre option m'a parfaitement convenue. Mais je veux bien voir autre chose si c'est encore plus simple, pour certaines automatisation d'ailleurs, car il se pourrait que j'ai à faire des MAJ avec ces mêmes commandes sur les siteweb que je scrape.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    je ne connais pas mongodb.
    mais ça dépend davantage du format des données retourné par le SGDB, que du SGBD utilisé.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par AvySamaj Voir le message
    Bonjour.

    J'ai appris aujourd'hui à lancer des commandes de façon séquentielle avec cmd1 ; cmd2.
    Oui... Ou bien:

    J'ai fait un script pour la console bash tel que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    scrapy crawl spider -a arg1=machin -a arg2=bidule ; 
    scrapy crawl spider -a arg1=jain -a arg2=makeba ;
    #etc
    avec 150 fois une instruction proche mais différente.

    Et vous remarquerez qu'il y a des sauts de lignes cette fois contrairement à lorsque je lançais dans la console en écrivant à la main quand je testais. Mais ça me renvoi une erreur propre à scrapy "scrapy crawl [options] <spider>
    crawl: error: running 'scrapy crawl' with more than one spider is no longer supported
    + scrapy crawl spider -a arg1=jain -a arg2=makeba", ce qui signifie clairement que ça ne se fait pas façon séquentielle. Alors concernant les ";" je ne fut pas étonnée quand je lu ceci "Une série de commande peuvent être saisient sur la même ligne; c'est la liaison de commandes ; chaque commande est séparée des autres par un point virgule (";") et chacune est exécutée séquentielement les une après les autres." donc j'ai remplacé les ";" par des "&&" ne voyant pas de contre-indication. Mais j'ai la même erreur lorsque je lance
    .

    Comment puis-je faire des commandes séquentielles dans un script?
    Je ne comprends pas du tout pourquoi il y a une erreur, ni pourquoi elle disparaît dans les posts suivants, car, pour moi, les 2 écritures sont strictement équivalentes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrapy crawl spider -a arg1=machin -a arg2=bidule ; scrapy crawl spider -a arg1=jain -a arg2=makeba #etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    scrapy crawl spider -a arg1=machin -a arg2=bidule ; 
    scrapy crawl spider -a arg1=jain -a arg2=makeba ;
    #etc


    Bon, après, si le problème est réglé, c'est peut-être pas la peine de creuser davantage...

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Mon soupçon est que python envoie des tâches en arrière plan.
    Mais je n'ai aucune preuve.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

Discussions similaires

  1. [Débutant] Lancer plusieurs fois un BGW avec un argument différent
    Par phoenellion dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/08/2012, 09h59
  2. lancer à une console des commandes internes
    Par Dubitatif dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2006, 11h07
  3. Réponses: 7
    Dernier message: 27/03/2006, 13h34
  4. Réponses: 23
    Dernier message: 08/02/2006, 09h15
  5. [langage] Lancer une serie de commande en cmd par perl
    Par Ludo167 dans le forum Langage
    Réponses: 6
    Dernier message: 13/07/2004, 14h15

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