Vista previa que no abre el archivo - Problema de permisos (a través de Python)

3

Tengo una máquina virtual Mac que ejecuta Mavericks (10.9.3) y, por diversos motivos, estoy intentando escribir un script en Python para transferir automáticamente un archivo PDF a la VM y abrirlo en Vista previa. Para cualquier persona que no sepa, el comando <path-to-Preview> <path-to-file> abrirá el archivo.

Siempre que se ejecute el script, se abrirá la Vista previa, pero mostrará este mensaje de error:

EstoessolounarchivoPDFdemuestra,tambiénloheprobadoconunpardeotrosPDF.Esteerrornoseproducecuandoabroelarchivohaciendodobleclicenél.Solocuandointentoescribirlo.Elerrortampocoocurresiemprequeelarchivosehayaabiertomanualmenteunavez.

Tambiénhayunpardeotroserrores(rutasdesinfectadas).

ErrorenlaTerminal

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"}

Error en la consola

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

Cosas que he probado

  • Reparando los permisos de disco usando la utilidad de disco y reiniciando la máquina virtual
  • Cambiar los permisos del archivo a 777 antes de abrir
  • Eliminando cualquier atributo de archivo adicional (como la cuarentena) con xattr antes de abrir

El resultado de ls [email protected] en el directorio muestra que los permisos de archivo son:

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

La parte relevante de mi script se parece a esto:

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

Editar: Según el comentario de aglasser, subprocess.call(['open','-a','Preview',path]) funciona donde mi comando no lo hace.

Sin embargo, necesito poder obtener el pid del proceso de vista previa que se inició (mi script se ha simplificado para esto, así que no fue obvio) y no veo ninguna manera de hacerlo con abierto, especialmente con el proceso de vista previa múltiple potencialmente en ejecución. Puede que necesite una pregunta por separado para eso.

Más información para cualquier otra persona con este problema
La causa raíz de este problema parece ser el sandbox de la aplicación de Apple. Al parecer, intentar ejecutarlo de esta manera no funciona con el sandbox, pero "abrir" pasa por los canales adecuados para satisfacer los requisitos que tiene el sandbox.

    
pregunta Testing 22.08.2014 - 18:01

2 respuestas

0

He probado esto un poco en mi tiempo libre de hoy, y parece que subprocess.call(['open','-a','Preview',path]) es tu mejor opción para abrir archivos PDF en Vista previa de Python.

Todavía no estoy seguro de por qué no funciona la ruta de acceso absoluta a la vista previa.

Estoy tratando de encontrar una manera de obtener un PID de proceso basado en el título de su ventana en AppleScript. Por ejemplo, si abriera un documento llamado "Test.png" en Vista previa con ese comando, generaría una ventana de Vista previa con el título de la ventana "Prueba". Espero que haya una manera de obtener el PID de este proceso usando el título de la ventana, pero aún no estoy seguro.

    
respondido por el aglasser 22.08.2014 - 22:07
0

Parece que la vista previa a veces se confunde con las pemissions. Un problema similar se resolvió con esta respuesta simplemente dejando la vista previa.

    
respondido por el drevicko 01.12.2017 - 12:34

Lea otras preguntas en las etiquetas