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

AppleScript Discussion :

2 Bugs bizarres sous Applescript


Sujet :

AppleScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut 2 Bugs bizarres sous Applescript
    Je suis très surpris . L'instruction if exists ... marche à l'envers chez moi !!


    set pathFileToto to "Macintosh HD/Users/Nom_User/Desktop/toto.txt"
    set myFileToto to (pathFileToto as POSIX file)
    if not (exists myFileToto) then ....
    else ........
    end if


    Lorsque ce fichier toto.txt existe sous le desktop il se branche en "then" et lorsqu'il n'existe pas en "else". Bref tout le contraire de la logique booléenne!! Comprends pas !

    L'autre truc qui m'étonne est que je cherche un programme relativement automatisé et j'ai besoin de mon de User pour exécuter des déclarations simples genre property . J'appelle un shell en UNIX un peu + loin et ça marche bien. Pour ça je fais:
    set myUsername to (short user name of (system info))
    property VoiceSpeechFile : "Macintosh HD:Users:Nom_User:Library:preferences:com.apple.speech.voice.prefs.plist" -- mon nom de User est écrit en toutes lettres à ce niveau-là.

    Un display dialog myUsername m'affiche bien mon nom de User mais impossible de faire marcher le programme Applescript en substituant mon nom de User écrit en toute lettres (Nom_User) par myUsername. Le programme marche en écrivant mon nom en toutes lettres (Nom_User) et ne marche plus en lui substituant la variable myUsername !!! Il n'arrive plus à résoudre le do script shell + loin bien que mon nom de User soit écrit en toutes lettres dans la commande UNIX. Comprends pas non plus. Effet de bord ?
    Merci de votre aide.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Shub22,

    Il me semble que ton problème de test d'existence est du à 2 erreurs qui, du coup, laissent le script avec une variable incorrecte.
    Avec ton exemple, j'ai aussi toujours des erreurs:

    1) le chemin unix du fichier toto ne peut pas être "Macintosh HD/Users/Nom_User/Desktop/toto.txt". C'est un chemin Unix, donc il doit commencer par "/" par exemple "/Macintosh HD/Users/Nom_User/Desktop/toto.txt"
    Encore mieux, je te suggère de ne jamais coder en dur le bureau de l'utilisateur et d'utiliser la fonction "(path to desktop folder) as string".
    Ainsi, le script fonctionnera quelque soit l'utilisateur ! C'est plus propre.

    2) La fonction "exists" est une fonction du Finder et doit donc être encadrée par un bloc tell application "Finder".
    Par ailleurs tu demandes l'existence d'un fichier, mais dans le cas où il n'existe pas, le script ne pourra pas créer sa référence (myFileToto , dans ton script est une référence et pas une string) et générera une erreur.

    Donc le script qui fonctionne pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set myFileToto to ((path to desktop folder) as string) & "toto.txt"
    tell application "Finder"
        if not (myFileToto exists) then
            display dialog "existe pas"
        else
    display dialog "existe"
        end if
    end tell
    Quant au problème sur le username, cela peut venir de plusieurs raisons. Sans plus de précisions, il m'est difficile de t'aider.
    il faudrait que tu partages le morceau de script, la commande Shell avec les valeurs que tu as tracées.
    En passant sur Unix, l'erreur commune est la gestion des espaces et caractères spéciaux.
    Est-ce que ton user comprends un ou plusieurs de ces caractères ?

    Cordialement

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Ça marche beaucoup mieux comme ça. Ça fait une éternité que j'ai pas fait de l'Applescript et j'ai oublié les automatismes.
    Question un peu hors sujet: sais-tu par hasard où le Système cache des préférences comme la liste des voix actives ? J'ai cherché dans 2 Libraries mais j'ai pas trouvé. Un moment je pensais que com.apple.speech.voice.prefs.plist contenait la liste des voix actives et disponibles par le User mais sur les 2 Libraries, c'est la liste de TOUTES les voix disponibles, plus celles qui ont été utilisées récemment. Bon je vais continuer à chercher.

    Sinon c'est la panade entre Applescript et Unix.

    J'ai une commande + tard qui est:

    set mydesktopFolder to ((path to desktop folder) as string)
    set myFileToto to ((path to desktop folder) as string) & "toto.txt"
    do shell script ("plutil -convert xml1 " & quoted form of POSIX path of myFileToto & " -o " & mydesktopFolder & "toto.txt; chown Mon_nom_en_Dur /Users/Mon_nom_en_Dur/Desktop/toto.txt ") with administrator privileges

    Suis obligé de rajouter administrator privileges sinon la conversion par plutil d'UNIX ne marche pas inexplicablement. Je cherche à convertir puis afficher sur l'écran le fichier de Préférences com.apple.speech.voice.prefs.plist qui est en binaire. Les instructions UNIX plutil et chown marchent très bien sous Terminal quand je les tape mais là, via le do shell script, c'est la panade. Je dois oublier des caractères spéciaux je pense.
    Sinon c'est pas très élégant non plus de mettre son nom de User en dur . La variable UNIX $USER donne le nom de user ce qui conserve la généralité du programme mais là il y a un caractère spécial '$'.


    Message erreur donné par Applescript

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Dans ta commande do shell script, tu mets la variable "mydesktopFolder" ce qui ne manquera pas de poser un problème si le nom de ton disque ou celui de ton user comportent des caractères spéciaux ou des espace. Tu dois, là aussi, passer via un "quoted form of".

    Quant à ta conversion de plist en html, elle me semble un peu complexe pour simplement afficher le contenu:
    1) l'instruction putil fonctionne chez moi sans admin privilège.
    2) tant que tu utilises des fichiers de ton environnement utilisateur (Users//user/Library/preferences ou user/desktop), tu n'as pas besoin de privilèges spéciaux.
    3) le fichier plist com.apple.speech.voice.pref.plist de la bibliothèque utilisateur ne contient que 4 items (du moins sur mon Snow Leopard !)
    - SelectedVoiceCreator (number)
    - SelectedVoiceID (number)
    - SelectedVoiceName (string)
    - VoiceRateDataArray (array de 3 nombres)

    Si tu veux afficher certains de ces paramètres, il est beaucoup plus simple et efficace d'utiliser les capacités d'AppleScript qui sait gérer (lire/écrire) les fichiers plist.
    Libre à toi d'utiliser les valeurs obtenues pour les afficher ou autre... Voici un exemple de code qui mets en variable AS les valeurs de ton fichier Voice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set Ma_Plist to "com.apple.speech.voice.prefs.plist"
    set mydesktopFolder to ((path to desktop folder) as string)
    set myFileToto to ((path to desktop folder) as string) & Ma_Plist
    
    
    tell application "System Events"
        tell contents of property list filemyFileToto
            set Mon_Creator to value of property list item "SelectedVoiceCreator"
            set Mon_ID to value of property list item "SelectedVoiceID"
            set Mon_Name to value of property list item "SelectedVoiceName"
            set Mon_Array to value of property list item "VoiceRateDataArray"
        end tell
    end tell
    J'attire toutefois ton attention sur le risque de changer directement le contenu des plist du système ou des bibliothèques. En effet il peut y avoir des données déjà en cache et tu risque de créer des incohérences. Cela dépend bien sûr des Plist, certaines sont sans danger. N'ayant jamais joué avec les voix, je n'en sais pas plus.

    Cordialement

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Merci de ton aide.
    Je n'ai pas de variable VoiceRateDataArray mais par contre une variable SpeechDataInstallationLog.

    Par contre dans ce fichier com.apple.speech.voice.prefs.plist, le type de cette variable n'est pas renseigné ni comme string ou integer mais comme dict. Que se passe-t-il quand le fichier plist ne donne pas le type de la variable sinon le type <dict> et le présente juste à l'intérieur des balises <key> avec rien au-dessous à par <dict> ?
    C'est quoi le type de <dict> qui correspond à Applescript et sa syntaxe ? Les types dispo sont sur ce lien.
    Quand j'essaie de l'afficher comme list ou bounds, Applescript est pas content. Un display dialog de SpeechDataInstallationLog le fait planter. Dans la fenêtre résultat, il affiche des données entre accolade entrante ({) et fermante (}) ce qui fait penser que c'est une liste.
    Sinon ton script marche super bien et surtout il est simple.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Pour le SpeechDataInstallationLog, je ne l'ai pas, donc il m'est difficile de t'aider.
    C'est sans doute lié à ta version de système. Cela ressemble à une liste.
    En fait pour le savoir, il te faut un programme d'édition de plist.
    Apple en fourni un, Property List Editor. Je crois que je l'ai eu lorsque j'ai téléchargé l'environnement de développement Xcode.
    Donc tu peux le télécharger aussi.

    Sinon, tu me le mets en pj et je le regarde pour toi.

    Cordialement

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    J'ai pas trouvé la commande pour un MP ici et qui permet d'envoyer un fichier relativement long en pièce jointe. Si je l'envoie en clair, il est trop long de 6600 caractères et l'éditeur refuse.

    Comment on fait ? Sinon mon mail est stehub (arobas) hotmail (point) fr
    Ah ça y est j'ai trouvé : il y a un bouton "Gérer les pièces jointes en bas". Bon je le télécharge et tu me dis si tu l'a reçu.

    Cordialement,
    SH

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

Discussions similaires

  1. [CSS] Bug bizarre sous IE mais pas FF
    Par totofweb dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 13/09/2006, 20h40
  2. [TP] Affichage bizarre sous XP
    Par DioManU dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 08/06/2006, 11h52
  3. bug pointeurs sous win ??
    Par Tex-Twil dans le forum Windows
    Réponses: 4
    Dernier message: 23/03/2006, 15h59
  4. [CSS] float un peu bizarre sous FF.
    Par elraton dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/10/2005, 18h59

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