This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: webbrowser.UnixBrowser should use builtins.open
Type: Stage:
Components: None Versions:
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: amaury.forgeotdarc Nosy List: ackounts, amaury.forgeotdarc, gumpy, r.david.murray, schmichael
Priority: normal Keywords:

Created on 2008-12-04 21:49 by schmichael, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (9)
msg76931 - (view) Author: Michael Schurter (schmichael) Date: 2008-12-04 21:49
On the joyous occasion of Python 3000's release my friends & I were
playing with "import antigravity" and it failed for someone with the
following traceback (anonymized):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../lib/python3.0/antigravity.py", line 4, in <module>
    webbrowser.open("http://xkcd.com/353/")
  File "/.../lib/python3.0/webbrowser.py", line 61, in open
    if browser.open(url, new, autoraise):
  File "/.../lib/python3.0/webbrowser.py", line 275, in open
    success = self._invoke(args, True, autoraise)
  File "/.../lib/python3.0/webbrowser.py", line 226, in _invoke
    inout = open(os.devnull, "r+")
  File "/.../lib/python3.0/webbrowser.py", line 61, in open
    if browser.open(url, new, autoraise):
  File "/.../lib/python3.0/webbrowser.py", line 271, in open
    "expected 0, 1, or 2, got %s" % new)
webbrowser.Error: Bad 'new' parameter to open(); expected 0, 1, or 2, got r+

I believe the following patch (against branches/release30-maint) fixes
it cleanly:

Index: Lib/webbrowser.py
===================================================================
--- Lib/webbrowser.py	(revision 67538)
+++ Lib/webbrowser.py	(working copy)
@@ -8,6 +8,7 @@
 import stat
 import subprocess
 import time
+import builtins
 
 __all__ = ["Error", "open", "open_new", "open_new_tab", "get", "register"]
 
@@ -223,7 +224,7 @@
         cmdline = [self.name] + raise_opt + args
 
         if remote or self.background:
-            inout = open(os.devnull, "r+")
+            inout = builtins.open(os.devnull, "r+")
         else:
             # for TTY browsers, we need stdin/out
             inout = None
msg76946 - (view) Author: (gumpy) Date: 2008-12-04 23:51
I'd suggest the same thing that was done on lines 351-352.

Index: Lib/webbrowser.py
===================================================================
--- Lib/webbrowser.py	(revision 67538)
+++ Lib/webbrowser.py	(working copy)
@@ -223,7 +223,8 @@
         cmdline = [self.name] + raise_opt + args
 
         if remote or self.background:
-            inout = open(os.devnull, "r+")
+            import io
+            inout = io.open(os.devnull, "r+")
         else:
             # for TTY browsers, we need stdin/out
             inout = None
msg76957 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2008-12-05 01:08
Fixed in 67539 (py3k) and 67540 (release30-maint)
Thanks for the report!
msg76968 - (view) Author: Michael Schurter (schmichael) Date: 2008-12-05 03:47
I believe you forgot to "import io" in UnixBrowser (line 226).
msg76983 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2008-12-05 08:35
sorry**10... probably a wrong copy operation because the Linux machine
where I tested did not have my svn ssh keys.
Someone already corrected this on py3k (r67544, thanks to Fred!), I'll
take care of merging it to the 3.0 branch.
msg77083 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2008-12-05 22:21
Merged the 2nd fix with r67602.
msg133704 - (view) Author: (ackounts) Date: 2011-04-14 02:51
This problem is happening in my linux box:

Python 3.2 (r32:88445, Feb 21 2011, 01:55:53) 
[GCC 4.5.2 20110127 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import antigravity
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.2/antigravity.py", line 5, in <module>
    webbrowser.open("http://xkcd.com/353/")
  File "/usr/lib/python3.2/webbrowser.py", line 62, in open
    if browser.open(url, new, autoraise):
  File "/usr/lib/python3.2/webbrowser.py", line 276, in open
    success = self._invoke(args, True, autoraise)
  File "/usr/lib/python3.2/webbrowser.py", line 239, in _invoke
    stderr=inout, preexec_fn=setsid)
  File "/usr/lib/python3.2/subprocess.py", line 736, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.2/subprocess.py", line 1330, in _execute_child
    raise child_exception_type(errno_num, err_msg)
OSError: [Errno 9] Bad file descriptor
>>>
msg133725 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-04-14 11:36
Despite the apparent similarity, your issue is something different from what was reported in this issue.  Could you please open a new issue for your problem?
msg133775 - (view) Author: (ackounts) Date: 2011-04-14 21:49
yes, you right, I will create a new issue, thanks.
History
Date User Action Args
2022-04-11 14:56:42adminsetgithub: 48787
2011-04-14 21:49:43ackountssettype: crash ->
messages: + msg133775
components: + None, - Library (Lib)
versions: - Python 3.2
2011-04-14 11:36:38r.david.murraysetnosy: + r.david.murray
messages: + msg133725
2011-04-14 02:51:41ackountssetnosy: + ackounts

messages: + msg133704
versions: + Python 3.2, - Python 3.0
2008-12-05 22:21:11amaury.forgeotdarcsetstatus: open -> closed
messages: + msg77083
2008-12-05 08:35:08amaury.forgeotdarcsetstatus: closed -> open
messages: + msg76983
2008-12-05 03:47:32schmichaelsetmessages: + msg76968
2008-12-05 01:08:17amaury.forgeotdarcsetstatus: open -> closed
resolution: fixed
messages: + msg76957
2008-12-05 00:59:18amaury.forgeotdarcsetassignee: amaury.forgeotdarc
nosy: + amaury.forgeotdarc
2008-12-04 23:51:43gumpysetnosy: + gumpy
messages: + msg76946
2008-12-04 21:49:09schmichaelcreate