Seite 1 von 1

webbrowser öffnen

Verfasst: Freitag 15. November 2013, 13:48
von Boa
Hallo,

Das Öffnen des Webbrowsers funktioniert bei mir manchmal nicht. Ich habe mit dem debugger direkt vor dem Aufruf von webbrowser.open() einen Haltepunkt gesetzt. Wenn ich im debugger webbrowser.open() aufrufe bleibt der Aufruf hängen. Wenn ich einen KeyboardInterrupt sende, kommt manchmal diese Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/lib/python2.7/webbrowser.py", line 66, in open_new
    return open(url, 1)
  File "/usr/lib/python2.7/webbrowser.py", line 61, in open
    if browser.open(url, new, autoraise):
  File "/usr/lib/python2.7/webbrowser.py", line 198, in open
    p = subprocess.Popen(cmdline, close_fds=True, preexec_fn=setsid)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1234, in _execute_child
    data = _eintr_retry_call(os.read, errpipe_read, 1048576)
  File "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call
    return func(*args)
Woran kann das liegen?

Danke,
Boa

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 14:39
von snafu
Das ist aber doch nicht der komplette Traceback, oder? Ich vermisse darin nämlich den Teil, wo *dein Code* die Aufrufkette anstößt. Außerdem ist es immer sehr hilfreich, neben dem Traceback auch ein Minimalbeispiel mitzuliefern, welches dem tatsächlichen Code bestmöglich entspricht und bei dem der Fehler auch tatsächlich auftritt.

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 14:45
von Boa
Das ist nur der interessante Teil des Tracebacks. Ein Minimalbeispiel habe ich leider nicht. Prinzipiell funktioniert der Aufruf von webbrowser.open; selbst in dem Code Segment, dass ich zeigen könnte. Ich weiß ja, dass es genau an dem Aufruf webbrowser.open bzw an einer der Varianten liegt und nicht direkt an meinem Code, weil ich den debugger davor eingeschaltet habe und den Fehler dort reproduzieren kann, wenn er erst Mal aufgetreten ist. Ich bin gerade dabei die neuesten Updates einzuspielen und die VM ausnahmsweise Mal neuzustarten. Vielleicht liegt es am OS.
[EDIT] Nein, Neustart und Updates haben nicht geholfen.

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 14:47
von Boa
Der eigentliche Fehler ist nicht der, der beim Traceback gezeigt wird, sonder dass der Aufruf blockiert.

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 15:09
von Boa
Eine debug session sieht folgendermaßen aus:

Code: Alles auswählen

> /home/joe/projects/eclipse_ws/nubisave_clone/nubisave/CloudFusion/cloudfusion/store/dropbox/dropbox_store.py(110)__init__()
    109             ipdb.set_trace()
--> 110             webbrowser.open_new(url)
    111             print "1"

ipdb> webbrowser.open("http://www.google.de")
^C*** KeyboardInterrupt: 
ipdb> print "hi"
hi
ipdb> 
Der Code steht auf https://github.com/joe42/CloudFusion/tree/development zur Verfügung.

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 15:13
von Boa
Es hat etwas damit zu tun, dass subprocess nicht zurückkehrt. Ich habe im Debugger an der Stelle

Code: Alles auswählen

subprocess.call(["ls", "-l"])
ausgeführt. Dabei bekomme ich die Ausgabe des Befehls, jedoch bleibt dieser dann auch hängen.

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 15:34
von Boa
Ok, Problem gelöst. Da haben sich zwei Threads blockiert. Die Lösung war statt des Threads einen eigenen Subprozess zu öffnen. Python Thread Scheduling :roll:

Re: webbrowser öffnen

Verfasst: Freitag 15. November 2013, 16:05
von BlackJack
@Boa: Das dürfte mit Python nicht viel zu tun haben. Das verwendet „native” Threads des Systems.