4 votos

La vista previa no abre el archivo - Problema de permisos (vía Python)

Tengo una Mac VM corriendo Mavericks (10.9.3), y por diversas razones estoy tratando de escribir un script en Python para transferir automáticamente un archivo PDF a la VM y abrirlo en Vista Previa. Para quien no lo sepa, el comando <path-to-Preview> <path-to-file> abrirá el archivo.

Siempre que se ejecute el script, se abrirá Vista Previa, pero dará este mensaje de error: Error Message

Este es sólo un archivo PDF de muestra, lo he probado con un par de otros PDFs también. Este error no se produce cuando abro el archivo haciendo doble clic en él. Sólo cuando intento script. El error tampoco se produce mientras el archivo se haya abierto manualmente una vez.

También hay un par de errores más (rutas saneadas).

Error en el 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"}

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

  • Reparación de los permisos de disco mediante la utilidad de discos y reinicio de la máquina virtual
  • Cambiar los permisos del archivo a 777 antes de abrirlo
  • Eliminar cualquier atributo extra de los archivos (como la cuarentena) con xattr antes de abrirlos

El resultado de ls -l@ en el directorio muestra los permisos de los archivos son:

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

La parte relevante de mi script es algo así:

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 ser capaz de obtener el pid del proceso de Vista Previa que se inicia (mi script ha sido simplificado para esto, así que no era obvio) y no veo ninguna manera de hacer eso con open, especialmente con múltiples procesos de Vista Previa potencialmente en ejecución. Puede que necesite una pregunta separada para eso.

Más información para quien tenga este problema
La causa principal de este problema parece ser el sandbox de aplicaciones de Apple. Al parecer, el intento de script de esta manera no funciona con la caja de arena, pero "abrir" va a través de los canales adecuados para satisfacer cualquier requisito que la caja de arena tiene.

0 votos

¿Qué pasa con subprocess.call(['open','-a','Preview',path]) ?

0 votos

H

0 votos

Desafortunadamente necesito el pid para más que eso - envío a Preview un par de comandos, no estoy realmente interesado en cuando sale. He estado googleando mucho sobre abrir y obtener pids, pero todo lo que obtengo es que realmente no es posible. Así que "open" no funcionará en mi caso concreto. Si quieres publicar tu comando como respuesta, @aglasser, lo aceptaré, ya que responde a la pregunta original aunque no pueda usarlo.

1voto

Polo Puntos 574

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

Sin embargo, todavía no estoy seguro de por qué el uso de la ruta absoluta a la vista previa no funciona.

Estoy tratando de encontrar una manera de obtener el PID de un 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, se generaría una ventana de Vista Previa con el título de ventana "Test". Espero que haya una forma de obtener el PID de este proceso usando el título de la ventana, pero aún no estoy seguro.

0 votos

Gracias, avísame si encuentras algo prometedor en el enfoque PID-vía-ventana-título.

0voto

drevicko Puntos 135

Parece que a veces se confunde Preview con pemissions. Un problema similar fue resuelto por esta respuesta simplemente dejando la vista previa.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X