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

Applications et environnements graphiques Discussion :

drag drop de plusieurs fichiers vers le script ouvre plusieurs sessions


Sujet :

Applications et environnements graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut drag drop de plusieurs fichiers vers le script ouvre plusieurs sessions
    Salut, J'ai déjà bien avancé mais me reste une petite galère pour enfin pouvoir bientot manipuler un lot de fichiers envoyés par drag drop (glisser-déposer) vers le lanceur de mon script.
    Mon bien aimé Ubuntu [12.04] me lance une instance de fenêtre bash pour chaque fichier de ma sélection glissée alors que j'ai prévu dans mon script de les traiter un par un avec le classique :
    for "arg" in "$*" ...
    Je vous remercie d'avance.... Guillaume

    P.S: J ai bien peut d'être hors sujet: Si ça se trouve ça concerne les infos que j'ai du mettre dans le lanceur (.desktop) et dont je ne sais plus trop par quel miracle il a bien finit par lancer mon scrpit en lui filant pour paramètres positionnels les fichiers glissés.
    Car une fois renommé en .desktop (après l'avoir édité) je ne puis plus l'éditer... Mais euh là je m'égare... ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Bonjour

    Ah oui, ça c'est sûr. Si tu as fait "Pour chaque fichier, lancer firefox sur le fichier", il te lancera n fois firefox.

    Pourquoi ne pas plutôt lancer commande $* ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Je ne suis pas sur de me faire bien comprendre
    supposons que j'ai ce scipt: TestDrag.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    for arg in "$*"
    do
    	echo "$arg"; # afficher le nom des fichiers transmis peut déjà suffir à tester la boucle	
    	mplayer "$arg";        
    done
    read a
    exit
    ,que je glisse sur son .desktop (lanceur) 2 fichiers audio
    J'ai alors 2 lecteurs audio qui s'activent, un pour chaque fichier

    Hors, moi je voudrai que mon lecteur lise un fichier puis une fois cela fait ma boucle for in relancerait un lecteur pour en lire un autre.

    Mon objectif est de faire bosser ffmpeg (avconv) sur des fichiers vidéos et je ne veux pas lancer de tels process lourd en parallèle. Car si je veux interrompre le travail pour le reprendre plus tard je devrait arrêter tout les process et ainsi ne rien avoir de terminé et devrait tout relancer.
    J'ai fais ça sous dos, alors ici je réapprends tout
    aie aie aie j'ai peur qu'on vienne à me dire que je dois capter la gestion des pid , jobs....

    Si on me montre sur l'exemple simple que j'ai donné là je pense pouvoir adapter.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Tu te fais des noeuds au cerveau pour rien. Ma réponse reste valable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
     
    mplayer $*

    [edit] À moins que ce soit ton Ubuntu qui soit mal configuré et que ce soit lui qui envoie les scripts 1 par 1. Ta boucle for est alors caduque
    Dans ce cas là, configure mieux ton glisser/déplacer.
    Je ne suis pas sous Ubuntu. [/edit]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Encore merci Flodelarab, je vérifie hélas toujours mon problème sur ton exemple.
    Un(e) ubuntien(e) aurait-il(elle) connaissance d'un pareil réglage (du glisser-déposer...)? Je n 'ai pas trouvé

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    • Tu peux glisser-déposer dans une console plutôt
    • Ou sinon, sois malin: ne fais pas un script, mais deux. Un qui agrège et l'autre qui est ton vrai script.


    Pour le script qui aggrège, tu peux mettre le nom reçu dans un fichier temporaire et attendre 3 secondes. Si la dernière ligne du fichier temporaire est toujours la même, exécuter le second script sur le fichier temporaire.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
     
    fic=~/tmp/agregat.txt
     
    echo "$*" >>$fic
    sleep 3
     
    montour=$( tail -1 $fic )
     
    if [ "$montour" = "$*" ]
    then
       second_script
    fi
    J'avais le même comportement sous gnome. Je viens de tester cette solution et elle marche à merveille. Sans doute, tu peux réduire le délai à 1 ou 2 secondes.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Je désespère!
    Merci encore Flodelarabe mais je n'ai pas bien compris ton astuce avec un 1er script qui appellerait mon vrai script et puis je me dis surtout que de la même façon le 1er script sera lancé en plusieurs instances en parallèle (1 par fichier).

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Bonjour.

    T'as des discussions vraiment distendues.


    Premièrement, ma solution marche bien. Toi prendre.
    Deuxièmement, oui, plusieurs processus seront lancés en même temps. Et ça fait quoi? Sais-tu combien de processus sont lancés sur ta machine par session? Ce n'est pas un problème. ça monopolise ton système le temps du lancement (3 secondes maxi).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut !aysses1: Merci! Tu as mille fois raison Flodelarab
    Je n'y comprenais rien à ton script tant j'avais de lacunes en linux
    j'ai donc cherché et cherché de mon coté essayant briques par briques d'avancer vers une idée. Puis J'ai réussi à trouver THE solution

    Je reviens alors à ton message me disant que je comprendrai peut être ta proposition et la comparer.

    Et là : Stupéfaction ! Je me rend compte que je n'ai rien fais d'autre que de réinventer la roue puisque c'est exactement sur le même principe que le tiens.

    Encore mille merci !!
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #!/bin/bash
    #*************DRAG & DROP Début 1ere partie***( à placer en début de vos script)******#
    #Empeche que soient simultanés les traitements des fichiers glisser vers ce script  #
    #  car dans ce cas il est lancé en plusieurs instances en // (une par fichier)
    filedragdrop=~/WOpenDCP/dragdropListFile.tmp      # fichier temporaire où les instances du script vont
    echo $1 >> $filedragdrop   			 #  ecrire le parametre positionnel $1 recu 
    derniere=`tail -1 $filedragdrop`   		#extrait le contenu de la dernière ligne du fichier tempraire
    premiere=`head -1 $filedragdrop` 		#extrait le contenu de la première ligne du fichier tempraire
    # echo "derniere $derniere premiere $premiere"
    if [[ $1 != $premiere ]] 		# si le parametre du script courant=la 1ere ligne ecrite du fichier temporaire
    	then 
    	exit  # on quitte les autres instances
    fi 
    echo "Récupération des fichiers à traiter en cours";sleep 3 # Laisse le temps à toutes les instances de faire leur écriture
    #**************DRAG & DROP Fin 1ere partie********************************************#
     
     
     
     
    #**************DRAG & DROP Début 2eme partie***( à placer à l'endroit du traitement des fichiers)******#
     #Attention s'il y a des read (pour interroger l'utilisateur) cela perturbera la lecture du fichier
    while read line  
    do   
       # Mettre ici le traitement des fichiers
       echo -e "$line\n"  
    done < $filedragdrop
    #echo -n > $filedragdrop # vide le fichier
    rm "$filedragdrop"	# efface le fichier temporaire
    #**************DRAG & DROP Fin 2eme partie********************************************#
    Je pense qu'il te manquait cette deuxième partie qui parcourt les paramètres écris pour les utiliser.
    Ca marche très bien sauf du fait que dans mon traitement je fait pour le moment des read pour poser des questions à l'utilisateur.
    Je ne sais pas si on peut trouver une parade contre cela ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 245
    Points : 13 464
    Points
    13 464
    Par défaut
    Effectivement, j'avais séparé en deux scripts, pour que le deuxième fasse comme si le drag'n'drop prenait tous les fichiers en 1 fois.

    Ensuite, tu devrais protéger tes variables "$premiere", "$1", etc sinon, le test renverra une erreur si ton nom de fichier contient des espaces (par exemple).

    En ce qui concerne les "read", tu ne vas pas les faire en même temps. Il n'y a donc pas de problème. La source de ton script n'est pas la source de ta boucle while.
    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. drag drop de plusieurs fichiers vers le script ouvre plusieurs sessions
    Par gdoise dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 11/06/2013, 19h07
  2. Réponses: 10
    Dernier message: 12/06/2006, 16h45
  3. Réponses: 22
    Dernier message: 26/05/2006, 19h03
  4. Envoi de variables/fichiers vers un script PHP
    Par e-king dans le forum Réseau/Web
    Réponses: 9
    Dernier message: 02/04/2006, 19h44
  5. Comment faire un Drag&Drop d'un TListBox vers un TDbCtrlGrid ?
    Par claude dans le forum Composants VCL
    Réponses: 3
    Dernier message: 30/06/2004, 14h08

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