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

Tcl/Tk Discussion :

Commande shell iTcl/iTk


Sujet :

Tcl/Tk

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Commande shell iTcl/iTk
    Bonjour,
    Je me presente, je suis debutant en Tcl/Tk mais programme deja dans d'autres langage.
    Les bases du Tcl sont simple mais qulques problemes surgissent et me pertube.
    Ma question premiere est, comment fait t'on pour executer une commande shell?
    Style, mon probleme je dois tester si la clef usb est presente, donc la monte et si pas d'erreur la clef est presente!
    Je comptais utiliser la commande "mount -t vfat /dev/sda1 /mnt/clef/", mais si je met sa dans un exec, sa ne marche pas, pourquoi?

    mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    proc PresenceDiskUSB {} {
        # Addresse de la clef usb montée
        set AddressUSB "/mnt/clef/"
    
        # Monte La Clef Usb sur /mnt/clef
        set mntkey [catch {exec mount -t vfat /dev/sda1 $AddressUSB}]
        if {$mntkey!=0} {
            return -1
        }
        # Demonte la Clef Usb
        catch {exec umount /dev/sda1}
    return 0
    }
    Une fois la clef detecter je dois la remonter, copier un fichier dessus et la demonter!
    Merci de vos reponse rapide!

  2. #2
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Bonjour

    Qu'est-ce qui ne marche pas ?
    pour le savoir, commence par afficher l'erreur que tu as, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    proc PresenceDiskUSB {} {
        # Addresse de la clef usb montée
        set AddressUSB "/mnt/clef/"
    
        # Monte La Clef Usb sur /mnt/clef
        set mntkey [catch {exec mount -t vfat /dev/sda1 $AddressUSB} sortie]
        if {$mntkey!=0} {
            puts  $sortie
            return -1
        }
        # Demonte la Clef Usb
        catch {exec umount /dev/sda1}
    return 0
    }
    sinon, tu y as peut-être pensé, mais la commande mount ne peux s'utiliser qu'en tant que root.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    J'y ai deja pensé.
    Mais je n'est pas penser au root. je vais tester le root et je vous tiens informé.
    thanks pour ta reponse!

  4. #4
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par MkCreation Voir le message
    J'y ai deja pensé.
    Dans ce cas là, pense à donner le message d'erreur, ça nous aide à trouver ce qui ne va pas, parce que le
    Citation Envoyé par MkCreation Voir le message
    sa ne marche pas
    c'est plus que flou

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Comme je devellope sur une machine suse linux dans l'entreprise, je peux intervenir sur le programme que par crenaux horaire, lol!
    Des que j'ai recuperé le message d'erreur je vous le fais parvenir.

    Sinon si quelqun peut me donner un bout de code permettant de monter une clef pour y copier des fichier dessus en fat, je suis preneur!

    Thanks

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    re
    Suite a mes test je m'apercoit que tout vous donne raison, le message d'erreur me rappelle que je n'est pas les droit root pour executer la commande.

    d'ou ma nouvelle question, comment fais ton pour se logger en utilisateur root a partir de tcl?

    Si j'utilise la commande "su" comment je fais pour rentrer le mot de passe?
    Si une commande existe en tcl merci de me la faire parvenir, lol!

    Merci a vous

  7. #7
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    je ne sais pas si c'est une bonne idée de se connecter en tant que root depuis tcl car cela t'obligerait à stocker ton mon de passe dans ton script !!!

  8. #8
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    il vaudrait mieux que tu configures ton linux pour qu'un utilisateur non root puisse monter une clé (va voir sur le site de Léa www.lea-linux.org/)

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    vraiment intelligent corentin59, thanks

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 528
    Points
    528
    Par défaut
    Bonsoir,

    Il faudrait essayer d'ajouter la commande eval devant exec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set mntkey [catch {eval exec mount -t vfat /dev/sda1 $AddressUSB} sortie]
    ----
    Canvas

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Oui canvas, rajouter eval, heu, sa sert a quoi eval?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set mntkey [catch {eval exec mount -t vfat /dev/sda1 $AddressUSB} sortie]
    merci

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Le Test
    Je Vais Modifier le fichier /etc/fstab pour ajouter une ligne cocernant la clef USB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /dev/sda1     /mnt/ClefUsb     vfat     defaults,rw,user,noauto     0     0
    /dev/sda1 : Adresse du peripherique Usb
    /mnt/ClefUsb : Adresse de montage de la clef Usb

    vfat : Format de fichier type Fat32
    defaults : équivalent à rw,suid,dev,exec,auto,nouser,async
    rw : accès en lecture et écriture
    user : permission accordée aux users ordinaires de faire un mount
    noauto : pas de mount automatique, pour les media amovibles une erreur en résulterait si le média n'était pas en place au moment du boot.

    0 : Pas de dump
    0 : Pas de verification de pass

    Toutes les infos sur : http://f3wm.free.fr/linux/fstab.html

    Demain je teste sa et vous informe de la suite, thank a vous tous!

  13. #13
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Canvas Voir le message
    Bonsoir,

    Il faudrait essayer d'ajouter la commande eval devant exec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set mntkey [catch {eval exec mount -t vfat /dev/sda1 $AddressUSB} sortie]
    ----
    Canvas
    Non, la commande eval n'est pas utile ici.

    exec permet de faire exécuter des sous-processus depuis un script
    eval évalue un script Tcl

    Il est nécessaire de mettre les deux commandes ensemble uniquement lorsque le nom du sous-processus à faire exécuter par exec n'est pas connu lors de la programmation et que ce dernier sera contenu dans une variable tcl.

    Par exemple, on peut directement écrirePar contre, si la fonction mkdir et ses paramètres sont dans une variable, on ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set fctpourfaireundir "mkdir nomdudir"
    eval exec $fctpourfaireundir

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Thanks Corentin, dit moi tu ti connais bien en tcl/tk, tu es d'ou?
    Sa pourrai etre interressant une formation tcl, mdr!
    Sinon tu as pas des codes de ta creation qui pourrai etre assez avancé pour aprendre 2 3 truc sur tcl?
    merci

  15. #15
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    En fait, j'ai appris le TCL il y a un an mais comme je m'en sert tous les jours, ça rentre vite

    J'ai tout appris avec le livre "TCL/TK, Apprentissage et référence" de Bernard Desgraupes, un excellent livre en français sur le TCL/TK, que je conseille à tous ceux qui veulent débuter.

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Merci Corentin, je vais voir pour le livre, lol!
    Tous les jour? Oups, je ne pense pas en arriver là!
    Je sais pas, c simmple, heuu on dira sa mais je trouve que c'est long a l'execution, dommage!
    Merci tt de meme!

  17. #17
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par MkCreation Voir le message
    Je sais pas, c simmple, heuu on dira sa mais je trouve que c'est long a l'execution, dommage!
    Merci tt de meme!
    En fait, le TCL est un langage de script, ce qui signifie qu'il n'est pas fait pour faire de longs et couteux calculs mais plutôt pour servir de ciment entre différentes briques écrites dans un autre langage (le C par exemple) et qui gèrent les calculs lourds. C'est dans ce rôle qu'il excelle.

    Cependant, sa simplicité permet aussi de l'utiliser pour développer des programmes que l'on exécute une ou deux fois, afin de mettre au point une méthode : "tiens, si je faisais tel ou tel traitement sur mes données, est-ce que ça améliorerait les performances ?" pour répondre à ce genre de questions, il est facile de faire des essais en tcl, même si c'est long !!

    Enfin, un autre gros avantage que je trouve à TCL, c'est la sur couche TK, qui permet de faire rapidement des applications graphiques multi-plateformes.

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Premier pas franchi
    voila,
    apres avoir modifeir le fichier fstab, le premier probleme est resolu, plus de bug pour le montage de la clef.
    Il me reste encore quelques bugs a resoudre, faut que je me plonge a fond dans les code, lol!

    Voila un ti bout de code: probleme, la fonction TransfertDiskUSB ne se lance pas, plus d'info bientot!!!

    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
    set RES [SQL $id "SELECT * FROM 'pesee' WHERE 'transfert' = 'non';"]
        LogFileUSB "RES    :     $RES"
            if {$RES!={}} {
                set ID [catch {open "tmp/mouvements chariots.txt" w+} resultat]
                    LogFileUSB "Ouverture fichier : $resultat"
                    foreach i $RES {
    	        set b ""
    	        set a ";"
    	        foreach j $i {
    	            set b $b$j$a
    	        }
                    set j [string range $b 0 [expr [string length $b]-2]]
    	        puts $ID $j
                    }
                    close $ID
                    set R [TransfertDiskUSB "mouvements chariots.txt" 1]
    TransfertDiskUSB : Fonction transfert clef usb ( arg1 : nom fichier, arg2 : sens Usb->Disk (1))

    LogFileUSB : ecrit dans le fichier logusb le message passer en argument.

    voila si vous vouyez une erreur flagarnte merci de me signaler, la fonction transfertdiskusb ne se lance jamais!

    merci

  19. #19
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par MkCreation Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set ID [catch {open "tmp/mouvements chariots.txt" w+} resultat]
    cette ligne ne fait pas ce que tu veux :
    1) la commande catch renvoie 0 s'il n'y a pas eu d'erreur et 1 sinon (donc si tout va bien, ID vaudra 0)
    2) resultat contiendra la valeur renvoyée par open, donc l'identifiant te permettant d'écrire dans ton fichier et non le nom du fichier

    voici un exemple de comment tu peux faire :
    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
    if { $RES != "" } {
    	set nomfichier "mouvements chariots.txt"
    	if { ![catch {open "tmp/$nomfichier" w+} ID] } {
    		LogFileUSB "Ouverture fichier : $nomfichier"
    		foreach i $RES {
    			set b ""
    			set a ";"
    			foreach j $i {
    				set b $b$j$a
    			}
    			set j [string range $b 0 [expr [string length $b]-2]]
    			puts $ID $j
    		}
    		close $ID
    		set R [TransfertDiskUSB $nomfichier 1]
    	} else {
    		error "impossible d'ouvrir $nomfichier"
    	}
    }

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Points : 3
    Points
    3
    Par défaut resolu
    merci pour tout tes conseil et ta presence!
    Mon probleme est resolu, tout fonctionne bien, javais oublier d'effacer une ligne de code qui contenait une variable pas declaré, donc erreur, mdr!

    Par contre comment fait tu pour mettre les fennetre tk en taille screen auto?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 04h36
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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