Seite 1 von 1

Datei mit Standart-Programm öffnen

Verfasst: Montag 14. Juli 2008, 14:55
von da.dom
HuHu...

was ist die sauberste Lösung um eine Datei (pdf) mit dem Standard-Programm der Laufzeitumgebung zu öffnen? Gibt es da was Plattformübergreifendes in Python oder muss ich da auf Windows (Zielplattform) Mittel gehen?

Danke schon mal
D

Verfasst: Montag 14. Juli 2008, 15:12
von Rebecca
Da es unter Linux nicht wirklich Standardanwendungen gibt, kann Python da auch nichts plattformuebergreifendes fuer bereitstellen. Unter Windows sollte os.startfile das sein, was du suchst.

Verfasst: Montag 14. Juli 2008, 15:14
von da.dom
mhh stimmt, jetzt wo du es sagst...dann werde ich es damit mal machen, für meine kleine Anwendung reicht das alle mal. Nur zu Lern-Zwecken: Jemand Ideen wie man so was in der Art Plattformübergreifen realisieren würde?

Verfasst: Montag 14. Juli 2008, 15:18
von n4p
Nur interessehalber.
Ich benutze auf meinem Laptop Ubuntu und das "weiß" auch, mit welchem Programm ich bei einem Doppelklick eine Datei öffnen will. Sollte es somit nicht auch möglich sein das aus Python zu starten?

Verfasst: Montag 14. Juli 2008, 15:21
von audax
xdg-open macht das.

Gibts nicht überall, funzt nicht immer perfekt. Aber in einer Gnome oder KDE Umgebung ist es meistens vorhanden.

Verfasst: Montag 14. Juli 2008, 15:55
von Rebecca
n4p hat geschrieben:Nur interessehalber.
Ich benutze auf meinem Laptop Ubuntu und das "weiß" auch, mit welchem Programm ich bei einem Doppelklick eine Datei öffnen will. Sollte es somit nicht auch möglich sein das aus Python zu starten?
Soweit ich weiss, speichern Gnome und KDE (und eventuell noch einige andere Desktop-Manager) sich Infos ueber Standardanwendungen ab, aber natuerlich jeder auf seine Weise. Es ist also nicht dein Linux, was das "weiß", sondern dein Desktop-Manager.

Was recht weit verbreitet ist, sind die Umgebungsvariablen $BROWSER und $EDITOR. Erstere wird von webbrowser.open unter Linux verwendet.

PS: Gerade mal xdg-open verwendet. Es ignoriert anscheinend die einzige Moeglichkeit, meinen Lieblingsbrowser und -Editor herauszufinden: Die oben genannten Umgebungsvariablen...

Nachtrag: Viele Programme (unter Linux zumindest), die auf externe Programme zum Ansehen/Bearbeiten von Dateien zurueckgreifen, lassen den Benutzer diese jeweils einstellen, was mir persoenlich sehr gut gefaellt.

Verfasst: Dienstag 15. Juli 2008, 00:10
von str1442
Umgebungsvariablen werden ja auch von der Shell beim Starten eben jener deklariert, der Desktop Manager kann ja nicht raten welche das ist und dann per Shellzugriff sich den Inhalt holen.

Verfasst: Dienstag 15. Juli 2008, 01:59
von lunar
str1442 hat geschrieben:Umgebungsvariablen werden ja auch von der Shell beim Starten eben jener deklariert, der Desktop Manager kann ja nicht raten welche das ist und dann per Shellzugriff sich den Inhalt holen.
Die Startskripte deiner Desktop-Sitzung werden mit einer Login-Shell ausgeführt, die unter der UID des Nutzers läuft und ergo auch die Konfigurationsdateien aus ~ ausliest. Nur liest eine nicht-interaktive Shell nicht alle Dateien. Die bash beispielsweise ignoriert beim nicht-interaktiven Start die .bashrc.

Aus diesem Grund definiert man solche Variablen in auch in der "~/.profile" (bei der bash) oder der "~/.zprofile" (oder auch "~/.zshenv"). Natürlich müssen sie auch exportiert werden, sonst sind sie nur für den aktuellen Shell-Prozess sichtbar.

@Rebecca
xdg-open ist ziemlich simpel gestrickt. Es versucht, die aktuelle Desktop-Umgebung herauszufinden. Unter KDE, Gnome und XFCE ruft das Skript dann einfach das jeweilige Tool zum Öffnen auf, also "kfmclient", "exo-open" oder "gnome-open". Erkennt es die Desktopumgebung nicht, macht es nichts sonderlich komplexes:
Es wertet immer $BROWSER aus, und wenn $BROWSER nicht gesetzt ist, prüft es "firefox", "mozilla" und "netscape".

Ich weiß nicht, welche Desktopumgebung du nutzt. Ich meine allerdings, mich zu erinnern, dass du fvwm nutzt. In diesem Fall wäre also $BROWSER bei dir falsch gesetzt.

Imho ist es auch ganz ok, dass $EDITOR ignoriert wird. Das Skript ist zum Öffnen da, nicht zum Editieren. Woher sollte das Skript auch wissen, ob ich eine HTML-Datei mit Firefox jetzt anzeigen (öffnen) oder mit Emacs editieren möchte.

Zum Bearbeiten einer Datei starte ich den Editor manuell, und Programme, die Dateien im Editor bearbeiten lassen, werten $EDITOR eh selbstständig aus.

Verfasst: Dienstag 15. Juli 2008, 07:19
von da.dom
Rebecca hat geschrieben:Viele Programme (unter Linux zumindest), die auf externe Programme zum Ansehen/Bearbeiten von Dateien zurueckgreifen, lassen den Benutzer diese jeweils einstellen...
Ok, das wäre natürlich auch eine Möglichkeit. Nehmen wir also an ich habe eine Datei (pdf) und Frage den benutzer mit welchem Programm er sie öffnen will. Wie öffne ich denn dann die Datei mit dem ausgewählten Programm so, das es auf allen Plattformen funktioniert?

Verfasst: Dienstag 15. Juli 2008, 07:32
von veers
http://29a.ch/git/gitweb.cgi?p=lanshark ... =HEAD#l203

http://29a.ch/git/gitweb.cgi?p=lanshark ... b=HEAD#l48

http://29a.ch/git/gitweb.cgi?p=lanshark ... =HEAD#l128

Das herausbauen sei dir nun selber überlassen ;)

Und Rebecca,
xdg-open sehe ich primär mal als Interface an. Wenn das deine Umgebung nicht unterstützt - passe es an oder lebe ohne dieses Feature. xdg-open löst das Problem für mindestens 90% der Benutzer. Und der Rest müsste wissen was er tut ;)