2016-05-20 4 views
4

In PyQt4 unter Apple Mac OS X erhalten Sie im Folgenden eine file reference URL Datei, die Sie per Drag & Drop verschieben können Format:Pfad von URL-Alias ​​der OS X-Dateireferenz abrufen (Datei: ///. File/id = ...)

file:///.file/id=123456.78901 

Diese interessanter~~POS=TRUNC ist keine gültige Datei-URL oder zumindest nicht transparent in den meisten Anwendungen beheben - es gibt keine /.file/id=... Datei im Dateisystem ist.

Verwenden Sie nur Shell, wie dereference dieser NSURL oder Dateireferenz oder Alias ​​(oder wie auch immer es heißt) in einen gültigen Pfad zur Datei auf dem Dateisystem?

Antwort

1

Man kann osascript verwenden, ein AppleScript Interpreter auf Standard-OS X, laufen mit dem folgenden Skript installiert:

osascript -e 'get posix path of posix file "file:///.file/id=123.456" -- kthxbai' 

Drucke /Users/josh/Downloads/paste-10837081.py.

+0

Ich habe das gleiche Problem. Wie nennt man das in Ihrem Python-Skript? Ich bekomme, dass osascript ein Python-Paket ist, aber es mag nicht die "-e". – BaldDude

+0

OK. es funktionierte. Ich musste osascript schreiben (...). Es funktionierte ohne das "-e" – BaldDude

+0

Python (z. B. in virtualenv) fehlt möglicherweise das entsprechende osascript-Paket. Daher ist es sicherer, den Shell-Befehl in einem [Subprozess] (https://docs.python.org/3/library/subprocess.html#subprocess.Popen) auszuführen. –

0

Schade sagten, Sie 'nur Shell', weil diese Antwort auf PyObjC abhängt: Foundation.NSURL.alloc().initWithString_(url).fileSystemRepresentation()
akzeptiert file:///.file/id=123456.78901
Returns b'/Users/dave/Desktop/testbox/dest'

0

In Swift können Sie URL.standardized verwenden, um den gültigen Pfad von einer Referenz-URL zu erhalten. Also in Swift 4 - um den Dateinamen von einer Drag-and-Drop-Datei zu bekommen, würden Sie etwas tun wie ...

let fileType = NSPasteboard.PasteboardType (kUTTypeFileURL as String) 

extension NSPasteboardItem { 
    func fileURL()->URL? { 
     if let refURL = self.string(forType: fileType) { 
      return URL (fileURLWithPath: refURL).standardized 
     } 
     return nil 
    } 
} 
Verwandte Themen