2010-09-04 27 views
0

J'essaie de trouver un moyen de restaurer (Remettre) Élément Corbeille en utilisant ScriptingBridge via PyObjC.Restaurer l'élément Corbeille à l'aide de ScriptingBridge dans Mac OS X via PyObjC

Il n'y a pas assez de documentation here

from AppKit import NSURL 
from ScriptingBridge import SBApplication 
targetfile = NSURL.fileURLWithPath_(f.realpath) 
finder = SBApplication.applicationWithBundleIdentifier_("com.apple.Finder") 
trash_items = finder.trash.items() 

Toutes les suggestions?

Merci!

PS: J'utilise Snow Leopard.

Répondre

1

Lorsque vous traitez avec AppleScript applications -ables de Python, vous trouverez presque toujours plus facile à utiliser appscript plutôt que Apple ScriptingBridge ou PyObjC. Une façon de le faire:

from appscript import * 
# move file to trash 
app("Finder").move(mactypes.File(f.realpath),to=its.trash) 
# get names of all items in the Trash 
app("Finder").trash.items.name.get() 
# move file x.txt from Trash to Desktop Folder 
app("Finder").trash.files["x.txt"].move(to=its.desktop) 

L'astuce consiste à obtenir la bonne référence d'événement Apple aux fichiers et dossiers souhaités. Il peut être encore plus facile de tricher un peu et obtenir le chemin vers le dossier de la corbeille et d'utiliser les opérations du système de fichiers standard sur celui-ci:

>>> app("System Events").trash.POSIX_path() 
u'/Users/nad/.Trash' 
+0

Merci pour votre aide! Mais, est-il possible de déplacer l'élément Corbeille vers le même endroit d'où il vient (comme l'option "Remettre")? – abhiomkar

+0

L'option "Remonter" est nouvelle dans OS X 10.6 (les utilisateurs classiques de Mac OS disent qu'ils restaurent une fonction manquante). Assez étonnamment, il semble que les informations sur les chemins de 'renvoyer 'pour tous les éléments placés dans la corbeille soient conservées dans un fichier' ~/.Trash/.DS_Store' (http://www.appleexaminer.com/MacsAndOS/Analysis/ SLPutBack/SLPutBack.html). Son contenu ne semble pas être exposé via l'interface Apple Events du Finder ou des événements système, à moins que d'autres API documentées n'y accèdent, il doit être considéré comme une API privée OS X sur laquelle il ne faut pas compter. Pardon! –