5. python

5.1. print ¸í·É¾î

  1. ¼Ò½º
    def mesg(): 
            a = 1
            return a
    
    print mesg()
            

    °á°ú
    1 
            

  2. ¼Ò½º
    a = 10
    b = 10
    def mesg(a, b):
            c = a + b
            return c
    
    print mesg(a, b)
           

    °á°ú
    20
           

  3. ¼Ò½º
    a = 10
    b = 10
    def mesg(a, b):
            c = a + b
            return c
    
    if __name__ == '__main__':
            print mesg(a, b)
           

    °á°ú
    20
           

5.2. python °´Ã¼ °øºÎÇϱâ1

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    x = FirstClass()
    y = FirstClass()
    
    x.setdata("Kim Yong-Il")
    x.display()
    
    y.setdata("3.14159")
    y.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello1.py
    Kim Yong-Il
    3.14159
    ¿À°Ô ¹Ù¸®
            

5.3. python °´Ã¼ °øºÎÇϱâ2

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    # SecondClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    # SecondClass ¶ó´Â °´Ã¼´Â FirstClass °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class SecondClass(FirstClass):
        def display(self):         # È­¸é Ãâ·Â ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            print 'Current value = "%s"' % self.data
    
    z = SecondClass()
    z.setdata(42)
    z.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello2.py
    Current value = "42"
    ¿À°Ô ¹Ù¸®
            

5.4. python °´Ã¼ °øºÎÇϱâ3

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    # SecondClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    # SecondClass ¶ó´Â °´Ã¼´Â FirstClass °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class SecondClass(FirstClass):
        def display(self):         # È­¸é Ãâ·Â ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            print 'Current value = "%s"' % self.data
    
    # ThirdClass(SecondClass):
    # Third ¶ó´Â °´Ã¼´Â Second °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class ThirdClass(SecondClass):
        def __init__(self, value):
            self.data = value
        def __add__(self, other):
            return ThirdClass(self.data + other)
    
    a = ThirdClass("abc")
    a.display()
    
    b = a + 'xyz'
    b.display()
    
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello3.py
     
    Current value = "abc"
    Current value = "abcxyz"
    ¿À°Ô ¹Ù¸®
            

5.5. python °´Ã¼ °øºÎÇϱâ4

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    class Subclass:
        data = 'spam'
        def __init__(self, value):
            self.data = value
        def display(self):
            print self.data, Subclass.data
    
    x = Subclass(1)
    y = Subclass(2)
    
    x.display()
    y.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello4.py
    1 spam
    2 spam
    ¿À°Ô ¹Ù¸®
            

5.6. python °´Ã¼ °øºÎÇϱâ5

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    class Super:
        def method(self):
            print 'in Super.method'
    
    class Sub(Super):
        def method(self):
            print 'starting Sub.method'
            Super.method(self)
            print 'ending Sub.method'
    
    x = Super()
    x.method()
    
    print "------------------>"
    
    x = Sub()
    x.method()
            

  2. °á°ú

    python hello5.py
    in Super.method
    ------------------>
    starting Sub.method
    in Super.method
    ending Sub.method
            

5.7. python °´Ã¼ °øºÎÇϱâ6

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    class Super:
        def method(self):
            print 'in Super.method'
        def delegate(self):
            self.action()
    
    class Inheritor(Super):
        pass
    
    class Replacer(Super):
        def method(self):
            print 'in Replacer.method'
    
    class Extender(Super):
        def method(self):
            print 'starting Extender.method'
            Super.method(self)
            print 'ending Extender.method'
    
    class Provider(Super):
        def action(self):
            print 'in Provider.action'
    
    if __name__ == '__main__':
        for klass in (Inheritor, Replacer, Extender):
            print '
    ' + klass.__name__ + '...'
            klass().method()
        print '
    Provider...'
        Provider().delegate()
            

  2. °á°ú

    python hello6.py
    ending Extender.method
    
    Inheritor...
    in Super.method
    
    Replacer...
    in Replacer.method
    
    Extender...
    starting Extender.method
    in Super.method
    
    Provider...
            

5.8. python °´Ã¼°øºÎÇϱâ 7

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    class Number:
        def __init__(self, start):
            self.data = start
        def __sub__(self, other):
            return Number(self.data - other)
    
    x = Number(5)
    y = x -2
    y.data
    
    print y.data
            

  2. °á°ú

    python hello7.py
    3
            

5.9. python °´Ã¼ °øºÎÇϱâ8

  1. ¼Ò½º
    #!/usr/bin/env python
    
    from gtk import *
    
    class indexer:
        def __getitem__(self, index):
            return index ** 2
    
    x = indexer()
    for i in range(5):
        print x[i],
            

  2. °á°ú

    python hello8.py
     
    0 1 4 9 16
            

5.10. smtp.py ¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥

ÃÖÈñö ¼Ò½º, ironyjk (at) kldp.org

/var/mail ¿¡ ÀÖ´Â ¸ÞÀÏÀ» ¿øÇÏ´Â ¸ÞÀÏ ÁÖ¼Ò·Î º¸³½´Ù.

½ÇÇà : cd /var/mail

python stmp.py ID ¸áÁÖ¼Ò

smtp.py
import smtplib , sys , string

def sendmail ( ff , to , text ) :
    if string.find ( ff , "@" ) == -1 :
        print "%s Break" % ff

        return
#   print " toaddr =  %s" % ff
#   print " text ==  %s" % text
    server = smtplib.SMTP('localhost')
    server.sendmail(ff , to , text)
    server.quit()


fromaddr = "root@localhost"
toaddr = sys.argv[2]

f = open ( sys.argv[1] )

line = f.readline()

text = ""

while line :
    if len ( string.split ( line ) ) > 2 and string.split ( line )[0] == "From" :
        sendmail ( fromaddr , toaddr , text )
        fromaddr = string.split ( line )[1]
        text = ""

    text = text + line
    line = f.readline()

if ( text != "" ) :
    sendmail ( fromaddr , toaddr , text )
    

5.11. bab.py ½Ä´ç ¸Þ´º ÇÁ·Î±×·¥

ÃÖÈñö¾¾ ¼Ò½º , ironyjk (at) kldp.org

Á¡½É¶§ ¹«¾ùÀ» ¸ÔÀ»±î °í¹ÎÇÒ¶§ Çѹø ½ÇÇàÇØÁÖ¸é µË´Ï´Ù.

bab.py
import random,smtplib,sys


list = ['Çѱ¹È¸°ü:ÇØ¹°µÈÀå','Çѱ¹È¸°ü:°¥ºñÅÁ', 'Çѱ¹È¸°ü:°¥ºñÅÁ', 'Çѱ¹È¸°ü:ºñºö¹ä','Çѱ¹È¸°ü:¼³··ÅÁ' ,'Çѱ¹È¸°ü:À°°èÀå' ,'»ïÀͽĴç:>¸¸µÎ±¹','»ïÀͽĴç:¹é¹Ý' ,'»ïÀͽĴç:Á¦À°ººÀ½' , '»ïÀͽĴç:±èÄ¡Âî°Ô' , '»ïÀͽĴç:±èÄ¡Âî°Ô' , 'Áß±¹Áý:º¹À½¹ä' , 'Áß±¹Áý:«»Í', 'Áß±¹Áý:>Â¥Àå¸é' , '»ïÀͽĴç:¾ß人À½¹ä' ,'ºÐ½ÄÁý:±èÄ¡º¹À½¹ä','ºÐ½ÄÁý:ºÎ´ëÂî°³']

menu = list [ int ( (random.random () * 100 ) % len (list) ) ]

fromaddr = "ID@address.org"
toaddr = "ID@address.org"
msg = "To: %s  Subject:¿À´ÃÀÇ ¸Þ´º!  ¿À´ÃÀÇ ¸Þ´º´Â %s ÀÔ´Ï´Ù." % ( toaddr ,  menu )

if  len ( sys.argv ) >  1 :
  msg = msg + "Áñ°Å¿î Àú³á½Ä»çÀÔ´Ï´Ù. Àú³á½Ä»ç ¾ÈÇÏ½Ç ºÐÀº °ü¸®ÀÚ¿¡°Ô ½Å°í ¹Ù¶ø´Ï´Ù. "


lastmenu = ""
msg = msg + " -- ÇöÀç ¸Þ´º ÇöȲ --  "

for i in list :
  if lastmenu != i :
    msg = msg + " - %s " % i
  lastmenu = i


msg = msg + " »õ·Î¿î ¸Þ´ºÀÇ Ãß°¡´Â ¾ðÁ¦³ª ȯ¿µÇÕ´Ï´Ù.  »õ·Î¿î ¸Þ´º´Â ID@address.org ¸ÞÀÏ º¸³»Áֽñ⠹ٶø´Ï´Ù."

server = smtplib.SMTP('address.org')
server.sendmail(fromaddr, toaddr, msg)
server.quit()
    

5.12. mysql µ¥ÀÌŸ Àоî¿À±â

mysql µ¥ÀÌŸ¸¦ °¡Á® ¿É´Ï´Ù.
    
#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect(host="localhost", db="test", user="root" , passwd="")

hash = db.cursor()
hash.execute("select * from test")
result = hash.fetchall()

for i in result:
    print result[0]

db.close()
    

5.13. ncurse ¿¹Á¦

¼Ò½º
#!/usr/bin/python
import curses
import time

stdscr=curses.initscr()
curses.start_color()
curses.init_pair(1,curses.COLOR_CYAN, curses.COLOR_BLACK)

stdscr.addstr(10,10,"test", curses.color_pair(1))
stdscr.addstr(12,10,"aaaaaaaa", curses.A_REVERSE)

stdscr.refresh()
time.sleep(5)
curses.endwin()
    

5.14. CGIHTTPServer.py »ç¿ëÇϱâ

  1. ¼­¹ö ½ÇÇàÇϱâ
    /usr/lib/python1.5$ python CGIHTTPServer.py
    Serving HTTP on port 8000 ...
            

  2. ·çÆ®±ÇÇÑ »ç¿ëÇϱâ

    vi CGIHTTPServer.py
    nobody = nobody_uid()
    # ¿©±â¼­ ½Ã½ºÅÛÀÇ nobody °èÁ¤ UID¸¦ °¡Á® ¿É´Ï´Ù.
    self.wfile.flush() # Always flush before forking
    pid = os.fork()
    if pid != 0:
        # Parent
        pid, sts = os.waitpid(pid, 0)
        if sts:
            self.log_error("CGI script exit status %#x", sts)
        return
    # Child
    try:
        try:
            # À̺κÐÀ» nobody·Î »ç¿ëÇÒ °æ¿ì´Â ´ÙÀ½°ú °°ÀÌ Çϰí, ·çÆ®¸¦ »ç¿ëÇÒ°æ¿ì´Â ÁÖ¼®Ã³¸®ÇÕ´Ï´Ù.
            os.setuid(nobody)
        except os.error:
            pass
        os.dup2(self.rfile.fileno(), 0)
        os.dup2(self.wfile.fileno(), 1)
        os.execve(scriptfile, args, env)
    except:
        self.server.handle_error(self.request, self.client_address)
            

  3. CGIHTTPServer ¸ðµâ¿¡¼­ CGI ½ÇÇàÇϱâ

    ¸ðµâÀ» ÀÌ¿ëÇØ¼­ ´ÙÀ½°ú °°ÀÌ °£´ÜÇÑ ¼­¹ö ÇÁ·Î±×·¥À» ÇÒ¼ö ÀÖ½À´Ï´Ù.
    #!/usr/bin/env python
    
    import CGIHTTPServer
    import BaseHTTPServer
    
    Handler = CGIHTTPServer.CGIHTTPRequestHandler
    
    PORT = 8080
    
    httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
    print "Serving at port ", PORT
    httpd.serve_forever()
            

    GIHTTPServer.py ¿¡ ¼Ò½º¿¡ º¸¸é cgi µð·ºÅ丮°¡ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÀÌ µÇ¾î ÀÖ½À´Ï´Ù.

    ÇÊ¿ä½Ã º¯°æÀ» ÇÒ¼ö ÀÖ½À´Ï´Ù.

    cgi_directories = ['/cgi-bin', '/htbin']

  4. cgi ÇÁ·Î±×·¥ (test.py)
    #!/usr/bin/env python
    
    print """Content-type: text/html
    
    ¼º°ø Çß½À´Ï´Ù.
    """
            

    À§¿Í °°Àº ¿¹Á¦¸¦ ÀÌ¿ëÇØ¼­ cgi-bin ¹Ø¿¡ ³Ö¾î¼­ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÀ» ÇÏ¸é µË´Ï´Ù.

    http://localhost:8080/cgi-bin/test.py

5.15. mysql Å×ÀÌºí ¼Ó¼º Ãâ·ÂÇϱâ

¼Ò½º
import MySQLdb

connection = MySQLdb.connect(user='root', passwd='', db='nalabi')
cursor = connection.cursor()  # Ä¿¼­ °´Ã¼¸¦ ¾ò¾î¿Â´Ù.
cursor.execute('select * from test')
res = cursor.description
for record in res:
        print "%-10s %-10s %-10s %-10s %-10s %-10s %-10s" % record
cursor.close() 
    

°á°ú
no         3          2          6          6          0          0         
num        3          2          6          6          0          0         
idx        3          2          6          6          0          0         
date       3          9          11         11         0          0         
host       252        13         255        255        0          1         
name       252        6          255        255        0          1         
passwd     253        13         13         13         0          1         
email      252        18         255        255        0          1         
url        252        19         255        255        0          1         
title      252        20         255        255        0          1         
text       252        3243       16777215   16777215   0          1         
refer      3          1          6          6          0          0         
reyn       3          1          1          1          0          0         
reno       3          1          6          6          0          0         
rede       3          1          6          6          0          0         
reto       3          1          6          6          0          0         
html       3          1          1          1          0          0         
moder      3          1          1          1          0          0         
bofile     253        18         100        100        0          1         
bcfile     253        14         100        100        0          1         
bfsize     3          5          4          4          0          1         
    

5.16. µð·ºÅ丮 ±ÇÇÑ ¹Ù²Ù±â

¼Ò½º
import commands, string, os

import os

out=commands.getoutput("ls -l")
a = string.split ( out , '\n' )

for i in range(len(a)):
    b = string.split ( a[i])
    if (b[0] != "\307\325\260\350")  :
        print b[8]
        cc = "chown %s:%s %s" % (b[8], b[8], b[8])
        commands.getoutput(cc)