На основе кода из http://www.cocoadev.com/index.pl?MoveToTrash я придумал следующее:
def get_trash_path(input_file):
path, file = os.path.split(input_file)
if path.startswith("/Volumes/"):
# /Volumes/driveName/.Trashes/<uid>
s = path.split(os.path.sep)
# s[2] is drive name ([0] is empty, [1] is Volumes)
trash_path = os.path.join("/Volumes", s[2], ".Trashes", str(os.getuid()))
if not os.path.isdir(trash_path):
raise IOError("Volume appears to be a network drive (%s could not be found)" % (trash_path))
else:
trash_path = os.path.join(os.getenv("HOME"), ".Trash")
return trash_path
довольно простой, и есть несколько вещей, которые нужно сделать seperatly, в частности, проверки, если файл уже существует в корзину (в избежать перезаписи) и фактическое перемещение в корзину, но это, кажется, покрывает большинство вещей (внутренние, внешние и сетевые диски)
Update: Я хотел громить файл в сценарии Python, так что я вновь применила Дэйва Решение Дрибина в Python:
from AppKit import NSURL
from ScriptingBridge import SBApplication
def trashPath(path):
"""Trashes a path using the Finder, via OS X's Scripting Bridge.
"""
targetfile = NSURL.fileURLWithPath_(path)
finder = SBApplication.applicationWithBundleIdentifier_("com.apple.Finder")
items = finder.items().objectAtLocation_(targetfile)
items.delete()
Способ применения прост:
trashPath("/tmp/examplefile")
Или подозрительный. – 2008-10-31 10:30:09