2016-12-20 5 views
3

J'essaie d'écrire un script qui va convertir .numbers documents en .csv documents. Il doit être exécutable depuis la ligne de commande afin que je puisse l'utiliser dans un hook git pré-commit.Applescript n'a pas les autorisations pour enregistrer le fichier

J'ai écrit un AppleScript pour prendre un chemin vers un fichier de nombres et l'exporter au format CSV, mais l'exportation ne fonctionnera pas car "Vous n'avez pas la permission. (6)". Je pense que cela a à voir avec le bac à sable, mais je ne peux pas utiliser AppleScript pour faire apparaître un sélecteur de fichiers car cela doit être complètement automatisé.

Comment puis-je donner mes autorisations AppleScript pour exporter vers ce fichier?

on run argv 
    set input_file to item 1 of argv 

    set output_file to input_file 
    --strip off the .numbers extention 
    set delims to AppleScript's text item delimiters 
    set AppleScript's text item delimiters to "." 
    if output_file contains "." then set output_file to (text items 1 thru -2 of output_file) as text 
    -- set the extension to be csv 
    set output_file to output_file & ".csv" 
    set output_file to POSIX file output_file 

    tell application "Numbers" 
     activate 
     tell (open input_file) 
      set activeDocument to it 
       with timeout of 3 seconds 
        export activeDocument as CSV to output_file 
       end timeout 
      close activeDocument saving yes 
     end tell 
    end tell 
end run 

Le message d'erreur complet est export_numbers_to_csv.scpt:604:676: execution error: Numbers got an error: The document “DisplayPlusButtonTestScripts.numbers” could not be exported as “DisplayPlusButtonTestScripts”. You don’t have permission. (6)

Mon appel est osascript export_numbers_to_csv.scpt /Users/me/Test\ Scripts/MyTests.numbers à partir du répertoire de travail /Users/me/.

J'ai les permissions d'écrire dans le répertoire où je demande au script d'écrire. J'ai également essayé d'exporter dans un répertoire temporaire (via le path to temporary items from user domain) mais j'ai reçu le même message d'erreur.

+0

Quelle classe AppleScript est 'fichier_entrée'? L'erreur peut être liée à la composition du chemin de destination. – vadian

+0

@vadian Je pense que c'est juste une chaîne. Il est transmis à partir de la ligne de commande sous la forme d'une chaîne de chemin avec des barres obliques. – MattL

+0

Je me demande pourquoi l'extension de fichier de la destination n'est pas mentionnée dans le message d'erreur. Quoi qu'il en soit, essayez 'set output_file dans le fichier POSIX output_file comme texte' – vadian

Répondre

2

Les autorisations peuvent être salissantes si un fichier .csv a déjà existé dans le même répertoire et avec le même nom que celui dans lequel vous essayez d'exporter. Si vous avez créé ce fichier .csv ou au moins l'avez édité/ouvert à un moment donné, vous aurez l'autorisation d'exporter vers ce nom, mais s'il n'a jamais été ouvert pour un accès en écriture sur votre machine (par exemple si vous l'avez téléchargé), alors les autorisations nécessaires ne seront pas là.

Pour contourner ce problème, vous pouvez ajouter les lignes suivantes à votre script avant le « Numbers" tell application » bloc:

open for access file output_file 
close access file output_file 

Ceci indique au script d'ouvrir le fichier pour l'accès en écriture, et depuis il suffit de l'ouvrir pour obtenir les autorisations nécessaires, puis de le fermer.