Ich denke etwas in Richtung des webbrowser Moduls, aber für Dateibrowser. In Windows möchte ich den Explorer öffnen, in GNOME unter Linux möchte ich Nautilus, Konqueror auf KDE usw. öffnen. Ich würde es vorziehen, es nicht zu blockieren, wenn ich es vermeiden kann. ;-)Gibt es eine plattformübergreifende Möglichkeit, einen Dateibrowser in Python zu öffnen?
Antwort
Ich würde es vorziehen, nicht aufzuklopfen, wenn ich es vermeiden kann.
Weeell Ich glaube, Sie werden ein wenig von Plattform-Sniffing Flickschusterei müssen, aber hoffentlich nicht so viel wie der grässlichen Befehl Sniffing webbrowser
Modul. Hier ist ein erster Stich:
Beachten Sie, dass die Win32-Version derzeit für Leerzeichen in Dateinamen fehlschlägt. Bug 2304 könnte etwas damit zu tun haben, aber es scheint ein grundlegendes Problem mit Parameter-Escaping und der Windows-Shell (cmd /c ...
), in dem Sie keine doppelten Anführungszeichen verschachteln können und Sie können nicht-Anführungszeichen oder Leerzeichen . Ich habe es nicht geschafft, eine Möglichkeit zu finden, cmd /c start C:\Documents and Settings
von der Befehlszeile überhaupt zu zitieren und auszuführen.
ETA re nosklo Kommentar: nur unter Windows gibt es eine eingebaute Möglichkeit, es zu tun:
if sys.platform=='win32':
os.startfile(d)
Hier ist das nicht sehr-gute Alternative Lösung, um die Schale und öffnen Sie einen Ordner mit ihm zu finden , die Sie nicht jetzt sollte brauchen, aber ich werde in verlassen. (zum Teil, weil es sonst der Einsatz für etwas sein könnte, aber vor allem, weil ich die Zeit zu geben das verdammte Ding verbracht!)
if sys.platform=='win32':
import _winreg
path= r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
for root in (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE):
try:
with _winreg.OpenKey(root, path) as k:
value, regtype= _winreg.QueryValueEx(k, 'Shell')
except WindowsError:
pass
else:
if regtype in (_winreg.REG_SZ, _winreg.REG_EXPAND_SZ):
shell= value
break
else:
shell= 'Explorer.exe'
subprocess.Popen([shell, d])
Dies ist ein kompletter Stich im Dunkeln, aber werfen Sie einen Blick auf wxPython, die Python-Bindungen zu der zugrunde liegenden wxWidgets Bibliothek bietet. Es ist lange her, seit ich es zum letzten Mal gesehen habe, aber da könnte etwas sein, das du benutzen kannst. Andernfalls sollte es relativ einfach sein, einen eigenen Dateibrowser zu erstellen, der die systemeigenen "Widgets" für jedes Betriebssystem verwendet.
Wohlgemerkt, wxPython ist nicht leicht, es wird wirklich Ihre Anwendung auffüllen und Ihre Abhängigkeiten erhöhen.
Ich weiß nicht, ob ein ready-to-use-Modul vorhanden ist, aber wenn es ist, sollte es auf dem Python cookbok (http://code.activestate.com/recipes/langs/python/)
auch, zumindest in gnome und auf mac os Active sein, Sie können "gnome-open http://blah" und "öffnen Sie http://blah" (auf Mac) ausführen; Beide öffnen die URL im bevorzugten Browser des Benutzers.
Für Linux überprüfen Sie auch Freedesktop.org - eine gemeinsame Reihe von Tools für beide Gnome und KDE, die etwas ähnliches enthalten sollte.
- 1. Gibt es eine nicht-Java, plattformübergreifende Möglichkeit, die zugehörige Anwendung für einen bestimmten Dateityp zu starten?
- 2. Was ist eine plattformübergreifende Möglichkeit, eine Sounddatei in Python abzuspielen?
- 3. Gibt es eine Möglichkeit, den JFace ElementTreeSelectionDialog ungefaltet zu öffnen?
- 4. Gibt es eine Möglichkeit, einen String in Flex zu forma
- 5. Gibt es eine Möglichkeit, eine Klasseneigenschaft in Python zu erstellen?
- 6. Gibt es eine Möglichkeit zu wissen, ob Benutzer Mail öffnen?
- 7. Gibt es eine C++ plattformübergreifende USB-Bibliothek?
- 8. Gibt es eine Möglichkeit, Team Explorer Everywhere Check-in-Richtlinien über die plattformübergreifende Befehlszeile zu konfigurieren?
- 9. Gibt es eine leichtgewichtige plattformübergreifende C++ - Dateisystembibliothek?
- 10. Gibt es eine plattformübergreifende Möglichkeit, eine Liste laufender Anwendungen zu erhalten?
- 11. Gibt es eine Möglichkeit, + = in Python zu überladen?
- 12. Gibt es eine Möglichkeit, Python-Druckanweisungen in Gunicorn zu protokollieren?
- 13. Gibt es eine Möglichkeit, einen Unterordner in Vagrant zu synchronisieren?
- 14. Gibt es eine Möglichkeit, einen Pfadverlauf in JavaFX zu erstellen?
- 15. Gibt es eine Möglichkeit, einen Zweig in GIT zu sperren
- 16. Gibt es eine Möglichkeit, einen JavaScript-Link in IE zu öffnen?
- 17. Gibt es eine plattformübergreifende Lösung für ImageSource zu Byte []?
- 18. Plattformübergreifende Möglichkeit zum Öffnen einer Datei mit Java 1.5
- 19. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 20. Gibt es eine Möglichkeit, einen Knopf zu drücken, ohne es auf tkinter/python zu berühren?
- 21. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 22. Gibt es eine bessere Möglichkeit, diesen Python-Code zu machen?
- 23. Gibt es eine effizientere Möglichkeit, diesen Python-Code zu schreiben?
- 24. Gibt es eine Möglichkeit, einen Browser von einem anderen Computer mit Knoten js zu öffnen?
- 25. Gibt es eine Möglichkeit programmgesteuert Python-Bytecode zu generieren?
- 26. Wie kann ich einen Dateibrowser in iOS
- 27. Gibt es eine Möglichkeit, Python-Skript unter Xamarin.Android zu verwenden?
- 28. Gibt es eine Möglichkeit, Datei von bekannten Inode öffnen
- 29. Gibt es eine Möglichkeit, einen Dateityp mit Webpack zu ignorieren?
- 30. Gibt es eine Möglichkeit, Python 3.5 auf Cygwin zu verwenden?
Seit " Dateibrowser "ist keine plattformübergreifende Funktion, worüber sprechen Sie eigentlich? Sprechen Sie über eine Art von GUI-Fenster, das "plattformübergreifend" ist? Welche GUI-Toolkits haben Sie betrachtet, die Ihrer Definition von "plattformübergreifend" entsprechen? –
@ S.Lott: Kein Python-Prozess-eigenes GUI-Fenster - Beschuss zu einem nativen Subprozess in dem Sinne, wie es "webbrowser" tut, passend zur Betriebsumgebung des Benutzers. – cdleary