asyncore.poll() question

C

chad

At the following url..

http://www.nightmare.com/medusa/programming.html

The author has the following code for a simple HTTP client

#!/usr/bin/python

import asyncore
import socket
import string

class http_client (asyncore.dispatcher):

def __init__ (self, host, path):
asyncore.dispatcher.__init__ (self)
self.path = path
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.connect ((host, 80))

def handle_connect (self):
self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

def handle_read (self):
data = self.recv (8192)
print data

def handle_write (self):
pass

if __name__ == '__main__':
import sys
import urlparse
for url in sys.argv[1:]:
parts = urlparse.urlparse (url)
if parts[0] != 'http':
raise ValueError, "HTTP URL's only, please"
else:
host = parts[1]
path = parts[2]
http_client (host, path)
asyncore.loop()


Right after that, the author states the following...

" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:

[...]
(r,w,e) = select.select (r,w,e, timeout)
print '---'
print 'read', r
print 'write', w
[...]

Each time through the loop you will see which channels have fired
which events.
"

How the heck do I modify the code put the print statement into the
asyncore.poll() function?

Chad
 
L

Lucasm

At the following url..

http://www.nightmare.com/medusa/programming.html

The author has the following code for a simple HTTP client

#!/usr/bin/python

import asyncore
import socket
import string

class http_client (asyncore.dispatcher):

    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))

    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    def handle_read (self):
        data = self.recv (8192)
        print data

    def handle_write (self):
        pass

if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()

Right after that, the author states the following...

" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:

        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]

Each time through the loop you will see which channels have fired
which events.
"

How the heck do I modify the code put the print statement into the
asyncore.poll() function?

Chad

Hi,

You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).

Lucas
 
F

Felipe Bastos Nunes

Or download the old source files, and use the asyncore.py that's there.

2010/10/16 said:
At the following url..

http://www.nightmare.com/medusa/programming.html

The author has the following code for a simple HTTP client

#!/usr/bin/python

import asyncore
import socket
import string

class http_client (asyncore.dispatcher):

    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))

    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    def handle_read (self):
        data = self.recv (8192)
        print data

    def handle_write (self):
        pass

if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()

Right after that, the author states the following...

" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:

        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]

Each time through the loop you will see which channels have fired
which events.
"

How the heck do I modify the code put the print statement into the
asyncore.poll() function?

Chad

Hi,

You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).

Lucas
 
C

chad

At the following url..

The author has the following code for a simple HTTP client

import asyncore
import socket
import string
class http_client (asyncore.dispatcher):
    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))
    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    def handle_read (self):
        data = self.recv (8192)
        print data
    def handle_write (self):
        pass
if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()
Right after that, the author states the following...
" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:
        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]
Each time through the loop you will see which channels have fired
which events.
"
How the heck do I modify the code put the print statement into the
asyncore.poll() function?

Hi,

You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).

Lucas

I just did that...

[root@localhost python2.6]# ls -al asyncore.py
-rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
[root@localhost python2.6]# ls -al asyncore.pyc
-rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
[root@localhost python2.6]# ls -al asyncore.pyo
-rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
[root@localhost python2.6]#


And nothing happened. Ideas?
 
F

Felipe Bastos Nunes

You edited the source of asyncore.py puttin the print statments and
nothing happend? It should work as the method is called as the page
you posted said.

2010/10/16 said:
At the following url..

The author has the following code for a simple HTTP client

import asyncore
import socket
import string
class http_client (asyncore.dispatcher):
    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))
    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    def handle_read (self):
        data = self.recv (8192)
        print data
    def handle_write (self):
        pass
if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()
Right after that, the author states the following...
" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:
        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]
Each time through the loop you will see which channels have fired
which events.
"
How the heck do I modify the code put the print statement into the
asyncore.poll() function?

Hi,

You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).

Lucas

I just did that...

[root@localhost python2.6]# ls -al asyncore.py
-rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
[root@localhost python2.6]# ls -al asyncore.pyc
-rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
[root@localhost python2.6]# ls -al asyncore.pyo
-rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
[root@localhost python2.6]#


And nothing happened. Ideas?
 
C

chad

You edited the source of asyncore.py puttin the print statments and
nothing happend? It should work as the method is called as the page
you posted said.

2010/10/16, chad <[email protected]>:


At the following url..
http://www.nightmare.com/medusa/programming.html
The author has the following code for a simple HTTP client
#!/usr/bin/python
import asyncore
import socket
import string
class http_client (asyncore.dispatcher):
    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))
    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    def handle_read (self):
        data = self.recv (8192)
        print data
    def handle_write (self):
        pass
if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()
Right after that, the author states the following...
" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:
        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]
Each time through the loop you will see which channels have fired
which events.
"
How the heck do I modify the code put the print statement into the
asyncore.poll() function?
Chad
Hi,
You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).
Lucas
I just did that...
[root@localhost python2.6]# ls -al asyncore.py
-rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
[root@localhost python2.6]# ls -al asyncore.pyc
-rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
[root@localhost python2.6]# ls -al asyncore.pyo
-rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
[root@localhost python2.6]#
And nothing happened. Ideas?

I edited the wrong file. Now it works.
 
C

chad

You edited the source of asyncore.py puttin the print statments and
nothing happend? It should work as the method is called as the page
you posted said.

2010/10/16, chad <[email protected]>:


At the following url..
http://www.nightmare.com/medusa/programming.html
The author has the following code for a simple HTTP client
#!/usr/bin/python
import asyncore
import socket
import string
class http_client (asyncore.dispatcher):
    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))
    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    def handle_read (self):
        data = self.recv (8192)
        print data
    def handle_write (self):
        pass
if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()
Right after that, the author states the following...
" A really good way to understand select() is to put a print statement
into the asyncore.poll() function:
        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]
Each time through the loop you will see which channels have fired
which events.
"
How the heck do I modify the code put the print statement into the
asyncore.poll() function?
Chad
Hi,
You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).
Lucas
I just did that...
[root@localhost python2.6]# ls -al asyncore.py
-rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
[root@localhost python2.6]# ls -al asyncore.pyc
-rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
[root@localhost python2.6]# ls -al asyncore.pyo
-rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
[root@localhost python2.6]#
And nothing happened. Ideas?
--

One last question.

Why does the author have both import sys and import urlparse below
__main__? Ie

if __name__ == '__main__':
import sys
import urlparse

Why not just put them at the top with the rest?

Chad
 
V

Von

The urlparse module is load only when this module run as main entry.
Its for test purpose of modules.


2010/10/17 said:
You edited the source of asyncore.py puttin the print statments and
nothing happend? It should work as the method is called as the page
you posted said.

2010/10/16, chad <[email protected]>:


On 16 Okt, 15:31, chad <[email protected]> wrote:
At the following url..

The author has the following code for a simple HTTP client

import asyncore
import socket
import string
class http_client (asyncore.dispatcher):
    def __init__ (self, host, path):
        asyncore.dispatcher.__init__ (self)
        self.path = path
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, 80))
    def handle_connect (self):
        self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    def handle_read (self):
        data = self.recv (8192)
        print data
    def handle_write (self):
        pass
if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
        parts = urlparse.urlparse (url)
        if parts[0] != 'http':
            raise ValueError, "HTTP URL's only, please"
        else:
            host = parts[1]
            path = parts[2]
            http_client (host, path)
    asyncore.loop()
Right after that, the author states the following...
" A really good way to understand select() is to put a print
statement
into the asyncore.poll() function:
        [...]
        (r,w,e) = select.select (r,w,e, timeout)
        print '---'
        print 'read', r
        print 'write', w
        [...]
Each time through the loop you will see which channels have fired
which events.
"
How the heck do I modify the code put the print statement into the
asyncore.poll() function?


You can find the file in your Python directory, in my case /usr/lib/
Python2.6/asyncore.py. You should delete the .pyc file to make sure it
is recompiled. And you will need root access :).

I just did that...
[root@localhost python2.6]# ls -al asyncore.py
-rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
[root@localhost python2.6]# ls -al asyncore.pyc
-rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
[root@localhost python2.6]# ls -al asyncore.pyo
-rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
[root@localhost python2.6]#
And nothing happened. Ideas?
--

One last question.

Why does the author have both import sys and import urlparse below
__main__? Ie

if __name__ == '__main__':
import sys
import urlparse

Why not just put them at the top with the rest?

Chad
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top