Seite 1 von 1

tempdatei und webbrowser.open() unter Linux

Verfasst: Montag 6. August 2007, 14:27
von jens
Ich möchte gern eine html Datei in einer Temp Datei speichern und direkt im Broweser aufrufen:

Code: Alles auswählen

import os, tempfile, webbrowser

def debug_response(content):
    fd, file_path = tempfile.mkstemp(prefix="PyLucid_unittest_", suffix=".html")
    os.write(fd, content)
    os.close(fd)
    url = "file://%s" % file_path
    webbrowser.open(url)
    print url


debug_response("TEST!")
Klappt unter Windows wunderbar.

Unter Linux geht's allerdings nicht :( Firefox baut die URL irgendwie um. z.B. sieht die so aus: file:///tmp/PyLucid_unittest_QD7tqp.html firefox mach daraus allerdings in der URL-Zeile das: file:///home/jens/Desktop/%22file:///tmp/PyLucid_unittest_QD7tqp.html%22

Weiß jemand warum?

Verfasst: Montag 6. August 2007, 14:37
von veers
Komisch, bei mir scheint das zu gehen.

Verfasst: Montag 6. August 2007, 14:49
von thelittlebug
hi,

bei mir gehts auch einwandfrei, es geht halt der lynx auf und nicht der firefox

lgherby

Verfasst: Montag 6. August 2007, 15:28
von jens
Also es läuft unter Ubuntu Edgy.

Ich hab jetzt allerdings folgendes gemacht: Ich hab zusätzlich Epiphany installiert und folgende Zeile versucht diesen zu starten: webbrowser._tryorder.insert(0, 'epiphany')

Der zeigt die Seite an.

Verfasst: Montag 6. August 2007, 17:16
von EnTeQuAk
Hallo Jens!

Bei mir Funktioniert es unter Fedora 7 ebenso wunderbar, wie bei meinen Vorrednern.

Probiere doch mal einfach nur `webbrowser.open(file_path)` aus. Firefox sollte automatisch erkennen, das es sich um einen Absoluten (sollte `file_path` absolut sein) Pfad handelt.

Um welche Version von FF handelt es sich, die das ganze nicht richtig anzeigt?


MfG EnTeQuAk

Verfasst: Montag 6. August 2007, 17:21
von jens
Also ohne ein "file://" sucht er wohl nach einer Domain... Auf jeden Fall steht dann sowas in der URL-Zeile: http://www.".com/tmp/PyLucid_unittest_SdtG2Z.html%22

Ist die aktuelle bei Ubuntu Feisty: v2.0.0.6
(Bin übrigends nicht mehr mit Edgy unterwegs ;) )

Verfasst: Dienstag 7. August 2007, 09:48
von jens
Nun hab ich noch ein anderes "Problem"... Die Temp Dateien sollten auch automatisch gelöscht werden.

z.Z. mache ich das so:

Code: Alles auswählen

import os, tempfile, webbrowser, time


def debug_response(content):
    fd, file_path = tempfile.mkstemp(prefix="PyLucid_unittest_", suffix=".html")
    os.write(fd, content)
    os.close(fd)
    url = "file://%s" % file_path
    print "DEBUG html page in Browser! (url: %s)" % url
    webbrowser.open(url)

    time.sleep(0.5)
    os.remove(file_path)


debug_response("TEST!")
Mit time.sleep() warte ich also, damit der Browser auch Zeit hat zu laden. Hat der Browser die Datei geladen, kann man sie einfach löschen.

Dumm ist allerdings, das der normale Ablauf dadurch verzögert wird. Wie könnte man das in einen seperaten Thread auslagern, der dann warten kann und die Datei löscht???

Verfasst: Dienstag 7. August 2007, 12:45
von jens
So, nun ist der Sourcecode online, wo ich das mit dem webbrowser brauche:

http://pylucid.net:8080/pylucid/browser ... S_Login.py

Ich teste mit dem django Test Client: http://www.djangoproject.com/documentat ... st_client/

Um zu sehen, warum ein Ergebnis im unittest nicht stimmt, kann man natürlich den reinen HTML Code durchstöbern. Aber daraus wird man oft nicht schlau. Also schreibe ich den in eine Temp Datei und zeige diese im Browser an...