Wie öffnet man eine Datei unter mac OSX 10.8.2 in python
Ich Schreibe eine python-code in eclipse und möchten eine Datei öffnen, die im Ordner "Downloads". Ich bin mit MAC OSX 10.8.2. Ich habe versucht, mit f=os.path.expanduser("~/Downloads/DeletingDocs.txt")
und auch mit
ss=subprocess.Popen("~/Downloads/DeletingDocs.txt",shell=True)
ss.communicate()
Ich wollen im Grunde, um eine Datei zu öffnen, die in Teilprozess, zu hören, um die änderungen in der geöffneten Datei.Aber, die Datei ist nicht zu öffnen in jedem Fall.
- Der erste parameter von
Popen
sollte eine ausführbare Datei sein, die nicht in einer Textdatei. - ss=subprocess.Popen("~/Downloads/DeletingDocs.txt",shell=True) funktioniert in windows. Aber in mac osx, es funktioniert nicht.
- Unter Windows habe ich erwarten, dass jeder Versuch zum ausführen einer Datei, die nicht ausführbar ist, wird stattdessen die Standard-Anwendung zum öffnen solcher Dateien. Am besten, das ist ein Missbrauch von
Popen
, wie es ist sicherlich nicht tragbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten OSX Datei-handling tho, der IO ist ein bisschen anders, je nach Dateityp.
Zum Beispiel, ein
.txt
- Datei, die unter Windows würde als eine "nur-text-Datei" ist eigentlich eine komprimierte-Daten-stream unter OSX, weil OSX versucht werden, "smart" über den Speicherplatz.Diese können literately Ihren Tag ruinieren, es sei denn, Sie wissen es (dort gewesen, hatte Kopfschmerzen.. verschoben auf)
Beim Doppel-Klick auf eine
.txt
Datei in OSX zum Beispiel normalerweise der text-editor öffnet sich und was es tut ist rufen Sie für eineos.open()
statt Zugriff auf einer niedrigeren Ebene, die lässt OSX mittleren Schichten tundisk-area|decompression pipe|file-handle -> Texteditor
aber wenn Sie den Zugriff auf das Datei-Objekt auf einer unteren Ebene werden Sie am Ende öffnen des disk-Bereich, wo die Datei gespeichert ist und wenn Sie drucken die Daten, die Sie erhalten Müll, weil es nicht die Daten, die Sie erwarten würden.Also versuchen Sie es mit:
Und rumfummeln mit den Fahnen.
Ich kann ehrlich nicht erinnern, welche der beiden die Datei geöffnet ist-von der Festplatte (
open()
oderos.open()
), aber einer von Ihnen macht Ihre Daten Aussehen wie Müll, und manchmal hat man einfach den Zeiger auf die Dekompression Rohr (wodurch Sie wie die 4 bytes der Daten auch wenn die text-Datei ist, hughe).Wenn es tracking - /Fang-updates auf eine Datei, die Sie wollen
Und wenn die Zeit unterscheidet sich von Ihrer letzten Prüfung, gut dann tun Sie etwas cool mit ihm.
Zum Beispiel, Sie haben diese Bibliotheken für Python, mit zu arbeiten:
Und VIELE mehr, so dass anstelle der öffnung eine externe Anwendung, als Ihre erste zu beheben, öffnen Sie via Python und ändern Sie nach Ihren wünschen statt, und nur als letztes Mittel (wenn überhaupt dann) open externe Applikationen über Popen.
Aber da Sie es beantragt (eine Art... erm), hier ist eine Popen Ansatz:
Über-erklären Ihr job:
Druckt eine-Dateien Inhalt jedes mal, wenn Sie geändert werden.
, Wie es funktioniert:
Die reguläre Datei opener
with open() as fh
wird, öffnen Sie die Datei und legen Sie es als ein Griff infh
, sobald Sie rufen.read()
ohne Parameter holt sich den gesamten Inhalt der Datei.Dies wiederum schließt nicht die Datei, es setzt einfach den "Lesen" - Zeiger auf den Rücken der Datei (sagen wir an der position 50 für die Bequemlichkeit).
So, jetzt Ihr Zeiger ist auf 50 Zeichen in der Datei, am Ende.
Wo immer Sie etwas schreiben, was in Ihrer Akte, das mehr-Daten in es so die nächsten
.read()
holt Daten von position 50+ machen die.read()
nicht leer, so legen wir den "Lesen" - Zeiger zurück auf die position 0 durch Ausgabe.seek(0)
- und dann drucken wir alle Daten.Zu kombinieren, dass mit
os.path.getmtime()
fein alle änderungen rückgängig gemacht oder im Verhältnis 1:1 änderungen (ersetzen eines Zeichen-mis-spelling etc).call
ist ein guter start, verwenden SiePopen()
statt.print(FileName,'is being opepned')
und dannx = Popen('open -W ' + FileName, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
und dannwhile 1: print(x.stdout.read())
print(x.poll())
sagen, wenn Sie schon "geschlossen" die Anwendung aber nicht entfernt es aus der dock? macht es Ihnen keine Statusmeldungen? Versuchen Sie Folgendes: pastebin.com/uRauWynu, Seit OSX ist wertlos in Bezug auf die Programmierung, und die Interaktion mit Anwendungen ist sehr linier du bist besser dran, überprüfung io-Operationen des Betriebssystems und fangen die Operationen auf die Datei, die Sie brauchen.Ich bin zögerlich zu beantworten, weil diese Frage wurde doppelt gepostet und ist mißverständlich formuliert, aber... wenn Sie möchten "öffnen" wird die Datei in OSX mit dem Standard-editor, fügen Sie dann die
open
- Befehl, um Ihre Teilprozess. Dies funktioniert für mich:myfile.txt
. Der wichtigste Teil ist das hinzufügen deropen
Befehl in die shell-Befehl. Wenn Sie den Pfad zu Ihrer Datei, dass die Datei geöffnet werden soll, in die GUI mit dem Standard-Anwendung. Aber es klingt wie die Beschreibung des Problems ist jetzt überwachen eine Datei für die änderungen, und nicht öffnen? Wir werden versuchen, am besten zu erraten, aber vielleicht @Torxed die meisten Optionen...Ist es wahrscheinlich ein Problem mit Berechtigungen, wenn Sie versuchen, Ihren code in den Python-interpreter, werden Sie wahrscheinlich erhalten eine "Zugriff verweigert" - Fehler von der shell beim Aufruf des teilprozesses.Popen. Wenn dies der Fall ist, dann werden Sie brauchen, um die Datei mindestens 700 (es ist wahrscheinlich, 644 Standardeinstellung), und Sie werden wahrscheinlich wollen, 744.
Versuchen, den code in den Python-interpreter und überprüfen Sie die "Erlaubnis verweigert" - Fehler, wenn Sie sehen, dass, tun Sie dies in einer shell:
Dann das Skript ausführen. Tun es alle in Python können Sie mit os.system:
Der Grund, warum es "funktioniert einfach" in Windows ist weil Windows unterstützt keine Berechtigung für Datei-Typen (Lesen, schreiben und ausführen) in der gleichen Weise wie bei *nix-Systemen (z.B. Linux, BSD, OS X, etc.) tun.