Datei mit Standart-Programm öffnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

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?
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

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?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

xdg-open macht das.

Gibts nicht überall, funzt nicht immer perfekt. Aber in einer Gnome oder KDE Umgebung ist es meistens vorhanden.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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.
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.
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

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?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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 ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten