Preview Not Opening File - Problema di autorizzazioni (tramite Python)

3

Ho una Mac VM con Mavericks (10.9.3), e per vari motivi sto cercando di scrivere uno script in Python per trasferire automaticamente un file PDF alla VM e aprirlo in Anteprima. Per chi non lo sapesse, il comando <path-to-Preview> <path-to-file> aprirà il file.

Ogni volta che lo script viene eseguito, Anteprima si aprirà, ma darà questo messaggio di errore:

QuestoèsolounfilePDFdiesempio,l'hoprovatoancheconunpaiodialtriPDF.Questoerrorenonsiverificaquandoaproilfilefacendodoppioclicsudiesso.Soloquandoprovoascriverlo.Anchel'errorenonsiverificafinchéilfileèstatoapertomanualmenteunavolta.

Cisonoancheunpaiodialtrierrori(percorsidisinfettati).

Errorenelterminale

2014-08-2209:33:49.074Preview[276:2c0b]PVPDFPageContainerinitWithURL:file:///path/The-Apple-Sandbox-BHDC2011-Paper.pdffailed,error=ErrorDomain=NSCocoaErrorDomainCode=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"}

Errore nella console

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

Cose che ho provato

  • Ripristino delle autorizzazioni del disco utilizzando l'utilità del disco e riavvio della VM
  • Modifica delle autorizzazioni del file su 777 prima di aprire
  • Rimozione di eventuali attributi di file aggiuntivi (come la quarantena) con xattr prima di aprire

Il risultato di ls -l@ nella directory mostra i permessi del file:

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

La parte rilevante del mio script assomiglia a questo:

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])

Modifica: come per il commento dell'aglasser, subprocess.call(['open','-a','Preview',path]) funziona dove il mio comando non lo farà.

Tuttavia, devo essere in grado di ottenere il pid del processo di anteprima che è stato avviato (il mio script è stato semplificato per questo, quindi non era ovvio) e non vedo alcun modo per farlo con aperto, specialmente con più processi di anteprima potenzialmente in esecuzione. Potrei aver bisogno di una domanda separata per questo.

Ulteriori informazioni per chiunque altro con questo problema
La causa principale di questo problema sembra essere la sandbox delle applicazioni di Apple. Apparentemente il tentativo di copiarlo in questo modo non funziona con la sandbox, ma "open" passa attraverso i canali appropriati per soddisfare qualsiasi richiesta della sandbox.

    
posta Testing 22.08.2014 - 18:01
fonte

2 risposte

0

Ne ho provato un po 'nel mio tempo libero oggi e sembra che subprocess.call(['open','-a','Preview',path]) sia la migliore opzione per aprire i PDF in Anteprima da Python.

Ancora non sono sicuro del motivo per cui utilizzare il percorso assoluto per l'anteprima non funziona, però.

Sto cercando di trovare un modo per ottenere un PID di processo in base al titolo della sua finestra in AppleScript. Ad esempio, se si aprisse un documento denominato "Test.png" in Anteprima con quel comando, verrà generata una finestra di anteprima con il titolo della finestra "Test". Spero che ci sia un modo per ottenere il PID di questo processo usando il titolo della finestra, ma non ne sono ancora sicuro.

    
risposta data 22.08.2014 - 22:07
fonte
0

Sembra che l'Anteprima a volte venga confusa con le pemissioni. Un problema simile è stato risolto da questa risposta semplicemente chiudendo l'anteprima.

    
risposta data 01.12.2017 - 12:34
fonte

Leggi altre domande sui tag