confusing error with nntplib

Martin P. Hellwig martin.hellwig at dcuktec.org
Thu May 27 07:25:11 EDT 2010


On 05/27/10 02:01, Eduardo Alvarez wrote:
> When trying to use nntplib to connect to the news server nntp.aioe.org,
> a bizarre sequence of events occurs:
>
> 1) I import the module, and create an instance, as follows:
>
> s = nntplib.NNTP('nntp.aioe.org')
>
> I get no errors, which leads me to believe all went well. The I try
> fetching info on a newsgroup (in this case, comp.lang.python):
>
> s.group('comp.lang.python')
>
> I then get the following error:
>
> Traceback (most recent call last):
>    File "<stdin>", line 1, in<module>
>    File "/usr/lib/python2.6/nntplib.py", line 345, in group
>      resp = self.shortcmd('GROUP ' + name)
>    File "/usr/lib/python2.6/nntplib.py", line 259, in shortcmd
>      return self.getresp()
>    File "/usr/lib/python2.6/nntplib.py", line 214, in getresp
>      resp = self.getline()
>    File "/usr/lib/python2.6/nntplib.py", line 206, in getline
>      if not line: raise EOFError
> EOFError
>
> Running this a *second* time, gives me the following, different error:
>
> Traceback (most recent call last):
>    File "<stdin>", line 1, in<module>
>    File "/usr/lib/python2.6/nntplib.py", line 345, in group
>      resp = self.shortcmd('GROUP ' + name)
>    File "/usr/lib/python2.6/nntplib.py", line 258, in shortcmd
>      self.putcmd(line)
>    File "/usr/lib/python2.6/nntplib.py", line 198, in putcmd
>      self.putline(line)
>    File "/usr/lib/python2.6/nntplib.py", line 193, in putline
>      self.sock.sendall(line)
>    File "<string>", line 1, in sendall
> socket.error: [Errno 32] Broken pipe
>
> As this is a broken pipe, I reconnect to the server, the same way as
> before. When I *then* retrieving the newsgroup's info, I get no errors.
>
> I'm pretty baffled by this. It might be an issue with the server itself,
> but still, any input would be very appreciated.
>
> yours,
>

Here is how I approached it:

# Lets see first if the server is available
[martin at aspire8930 /usr/home/martin]$ telnet nntp.aioe.org nntp
Trying 94.75.214.90...
Connected to nntp.aioe.org.
Escape character is '^]'.
200 nntp.aioe.org InterNetNews NNRP server INN 2.5.1 ready (posting ok)
^]
telnet> quit
Connection closed.
# Okidoki seems fine

# lets fire up python
[martin at aspire8930 /usr/home/martin]$ python
Python 2.6.4 (r264:75706, Apr  9 2010, 12:45:45)
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
 >>> import nntplib
 >>> s = nntplib.NNTP('nntp.aioe.org')
 >>> s.group('comp.lang.python')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/local/lib/python2.6/nntplib.py", line 345, in group
     resp = self.shortcmd('GROUP ' + name)
   File "/usr/local/lib/python2.6/nntplib.py", line 259, in shortcmd
     return self.getresp()
   File "/usr/local/lib/python2.6/nntplib.py", line 214, in getresp
     resp = self.getline()
   File "/usr/local/lib/python2.6/nntplib.py", line 206, in getline
     if not line: raise EOFError
EOFError
# Ah yes the same error, good at least the same problem.

# Lets see what the docs has to say about it.
 >>> help(nntplib.NNTP)
Help on class NNTP in module nntplib:

class NNTP
  |  # The class itself
  |
  |  Methods defined here:
  |
  |  __init__(self, host, port=119, user=None, password=None, 
readermode=None, usenetrc=True)
  |      Initialize an instance.  Arguments:
  |      - host: hostname to connect to
  |      - port: port to connect to (default the standard NNTP port)
  |      - user: username to authenticate with
  |      - password: password to use with username
  |      - readermode: if true, send 'mode reader' command after
  |                    connecting.
  |
  |      readermode is sometimes necessary if you are connecting to an
  |      NNTP server on the local machine and intend to call
  |      reader-specific comamnds, such as `group'.  If you get
  |      unexpected NNTPPermanentErrors, you might need to set
  |      readermode.
  |
# readermode seems to be worth a shot:
 >>> s = nntplib.NNTP('nntp.aioe.org', readermode=True)
 >>> s.group('comp.lang.python')
('211 2444 50405 52862 comp.lang.python', '2444', '50405', '52862', 
'comp.lang.python')
 >>>
# okidoki got something, but I have no idea why, perhaps need to have
# a look at the source to see what that mode actually does.
# But then again I think it would be better if you would do
# that and if you are feeling generous might contribute back
# to this thread what your findings where.

-- 
mph






More information about the Python-list mailing list