Prévisualisation Non Ouvrir le file – Période d'permissions (via Python)

J'ai une Mac VM exécutant Mavericks (10.9.3), et pour diverses raisons, j'essaie d'écrire un script en Python pour transférer automatiquement un file PDF vers la machine virtuelle et l'ouvrir dans l'aperçu. Pour ceux qui ne le savent pas, la command <path-to-Preview> <path-to-file> ouvrira le file.

Chaque fois que le script s'exécute, l'aperçu s'ouvrira, mais il donnera ce message d'erreur: Message d'erreur

Ce n'est qu'un exemple de file PDF, mais je l'ai essayé avec quelques autres files PDF. Cette erreur ne se produit pas lorsque j'ouvre le file en double-cliquant dessus. Seulement quand j'essaie de l'écrire. L'erreur ne se produit pas aussi longtime que le file a été ouvert manuellement une fois.

Il y a aussi quelques autres erreurs (paths désinfectés).

Erreur dans le terminal

 2014-08-22 09:33:49.074 Preview[276:2c0b] PVPDFPageContainer initWithURL:file:///path/The-Apple-Sandbox-BHDC2011-Paper.pdf failed, error = Error Domain=NSCocoaErrorDomain Code=257 "The file “The-Apple-Sandbox-BHDC2011-Paper.pdf” couldn't be opened because you don't have permission to view it." UserInfo=0x7fe7504ba220 {NSFilePath=/path/The-Apple-Sandbox-BHDC2011-Paper.pdf, NSUnderlyingError=0x7fe7504ba1f0 "The operation couldn't be completed. Operation not permitted"} 

Erreur dans la console

 9:33:49 AM sandboxd: ([276]) Preview(276) deny file-read-data path/The-Apple-Sandbox-BHDC2011-Paper.pdf 

Les choses que j'ai essayé

  • Réparation des permissions de disque à l'aide de l'utilitaire de disque et redémarrage de la VM
  • Modification des permissions du file sur 777 avant ouverture
  • Suppression de tous les attributes de file supplémentaires (comme la quarantaine) avec xattr avant ouverture

Le résultat de ls -l@ dans le directory montre que les permissions de file sont:

 -rwxrwxrwx 1 me wheel 364378 Aug 7 14:54 The-Apple-Sandbox-BHDC2011-Paper.pdf 

La partie pertinente de mon script ressemble à ceci:

 import subprocess import os path = <absolute path to PDF> os.chmod(path, 0777) result = subprocess.call(["xattr", "-c", path]) #result is always 0/success preview = "/Applications/Preview.app/Contents/MacOS/Preview" subprocess.call([preview, path]) 

Edit: Selon le commentaire d'aglasser, subprocess.call subprocess.call(['open','-a','Preview',path]) fonctionne où ma command ne fonctionnera pas.

Cependant, je dois pouvoir get le pid du process de prévisualisation qui a été démarré (mon script a été simplifié pour cela, donc ce n'était pas évident) et je ne vois aucun moyen de le faire avec ouverture, en particulier avec un process d'aperçu multiple potentiellement en cours d'exécution. Je pourrais avoir besoin d'une question distincte pour cela.

Plus d'informations pour toute autre personne avec ce problème
La cause principale de ce problème semble être le sandbox d'application Apple. Apparemment, la tentative de script de cette façon ne fonctionne pas avec le bac à sable, mais "ouvert" passe par les canaux appropriés pour satisfaire toutes les exigences du bac à sable.

J'ai testé ceci un peu dans mon time libre aujourd'hui, et il semble que subprocess.call(['open','-a','Preview',path]) est votre meilleure option pour ouvrir des PDF dans l'aperçu de Python.

Je ne suis toujours pas sûr que l'utilisation du path absolu à l'aperçu ne fonctionne pas cependant.

J'essaie de find un moyen d'get un PID de process basé sur son titre de window dans AppleScript. Par exemple, si vous deviez ouvrir un document intitulé "Test.png" dans l'aperçu avec cette command, il engendrerait une window de prévisualisation avec le titre de la window "Test". J'espère qu'il existe un moyen d'get le PID de ce process en utilisant le titre de la window, mais je ne suis pas encore sûr.