トップ 一覧 検索 ヘルプ RSS ログイン

tips-PYTHON2の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!メールクライアント SMTP
 import smtplib
 
 server = smtplib.SMTP('localhost')
 fromaddr = 'xxx@xxx.xxx.xxx'
 toaddr = 'yyy@yyy.yyy.yyy'
 # msg = 'test message'
 msg = MIMEText(test.encode(chset),'plain',charset)
 server.sendmail(fromaddr, toaddr, msg)
 server.quit()

!SMTP 2
 #!/bin/env python
 # -*- coding: utf-8 -*-
 import smtplib
 from email.MIMEText import MIMEText
 from email.Header import Header
 from email.Utils import formatdate
 
 def send(from_addr, to_addr, msg):
    # SMTPの引数を省略した場合はlocalhost:25
    s = smtplib.SMTP('localhost')
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()
    
 def create_message2(from_addr, to_addr, subject, body, encoding):
    # 'text/plain; charset="encoding"'というMIME文書を作ります
    msg = MIMEText(body, 'plain', encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg
 
 if __name__ == '__main__':
    from_addr = 'spam@example.com'
    to_addr = 'egg@example.com'
    msg = create_message2(from_addr, to_addr, u'テスト', u'本文', 'ISO-2022-JP')
    send(from_addr, to_addr, msg)

!Mail POP
 import getpass, poplib
 
 M = poplib.POP3('localhost')
 M.user(getpass.getuser())
 M.pass_(getpass.getpass())
 numMessages = len(M.list()[1])
 for i in range(numMessages):
    for j in M.retr(i+1)[1]:
        print j

!MAIL imap4
 import getpass, imaplib
 
 M = imaplib.IMAP4('localhost')
 M.login(getpass.getuser(), getpass.getpass())
 M.select()
 typ, data = M.search(None, 'ALL')
 for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print 'Message %s\n%s\n' % (num, data[0][1])
 M.close()
 M.logout()

! HTTPサーバ
 import BaseHTTPServer
 import SimpleHTTPServer
 
 addr = ('127.0.0.1', 8000)
 Server = BaseHTTPServer.HTTPServer
 handler = SimpleHTTPServer.SimpleHTTPRequestHandler
 
 httpd = Server(addr, handler)
 httpd.serve_forever()

!HTTPクライアント 
  import httplib
 
 h = httplib.HTTPConnection('www.yahoo.com')
 h.request('GET', '/index.html')
 r = h.getresponse()
 if r.status == httplib.OK:
    data = r.read()
    print data
 print 'Status=', r.status

! CGIサーバ
 import CGIHTTPServer
 import BaseHTTPServer
 import SimpleHTTPServer
 
 def serveForever(addr, HandlerClass = CGIHTTPServer.CGIHTTPRequestHandler,
        ServerClass = BaseHTTPServer.HTTPServer):
    HandlerClass.protocol_version = 'HTTP/1.0'
    httpd = ServerClass(addr, HandlerClass)
    sa = httpd.socket.getsockname()
    print "Serving HTTP on %s:%d" % (sa[0], sa[1])
    httpd.serve_forever()
  
 if __name__ == '__main__':
   serveForever(('127.0.0.1', 8000))


----
!TCPソケット(サーバ)
 import socket
 
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 sock.bind(('127.0.0.1', 12345))
 sock.listen(1)
 try:
   while True:
    (conn, sa) = sock.accept()
    msg = conn.recv(8192)
    print msg
    conn.close()
 except socket.error, e:
  print 'Error: %s' % e

!TCPソケット(サーバ/その2)
 import SocketServer
 
 class Handler(SocketServer.StreamRequestHandler):
  def handle(self):
    while True:
      line = self.rfile.readline()
      if len(line) == 0:
        return
      self.wfile.write(line)
 
 server = SocketServer.TCPServer(('127.0.0.1', 12345), Handler)
 print 'listening:', server.socket.getsockname()
 server.serve_forever()


!TCPソケット(クライアント)
 import socket
 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 sock.settimeout(10)
 try:
   r = sock.connect(('127.0.0.1', 12345))
   sock.send('test message')
 except socket.error, e:
   print 'Error: %s' % e


! UDP socket 

 Just this:
 
 import socket
 sock = socket.socket(socket.AF_INET, # Internet
                 socket.SOCK_DGRAM) # UDP
 sock.bind((IP,PORT))
 To send:
 
 sock.sendto(message,(IP,PORT))
 To receive:
 
 sock.recvfrom(1024)
 The 1024 displays the buffer size. There are not other changes necessary as far as 
 the socket part



!DNS クライアント
 import dns.name
 import dns.message
 import dns.query
 ### pip install dnspython ( python2 )
 ### $ pip install dnspython3 ( python3 )
 
 domain = 'www.yahoo.com'
 
 nameserver = 'set your dns-server ip address'
 
 domain = dns.name.from_text(domain)
 
 if not domain.is_absolute():
    domain = domain.concatenate(dns.name.root)
 
 request = dns.message.make_query(domain, dns.rdatatype.ANY)
 
 response = dns.query.udp(request,nameserver)
 
 print response.answer

! Directy size check
 #!/usr/bin/env python
 # coding: utf-8
 
 import os
 
 __all__ = [
        'disk_free', 'get_avail_size', 'get_total_size', 'get_used_size']
 
 def disk_free(path):
        u"""
        path の総容量、使用量、(現ユーザーの)使用可能容量を返す
        """
        s = os.statvfs(path)
        avail = s.f_bsize * s.f_bavail
        total = s.f_bsize * s.f_blocks
        free = s.f_bsize * s.f_bfree
        used = total - free
        return total, used, avail
 
 def get_total_size(path):
    return disk_free(path)[0]
 
 def get_used_size(path):
    return disk_free(path)[1]
 
 def get_avail_size(path):
    return disk_free(path)[2]
 
 
 def memory_free():
    """
    Get node total memory and memory usage
    """
    with open('/proc/meminfo', 'r') as mem:
        ret = {}
        tmp = 0
        for i in mem:
            sline = i.split()
            if str(sline[0]) == 'MemTotal:':
                ret['total'] = int(sline[1])
            elif str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):
                tmp += int(sline[1])
        ret['free'] = tmp
        ret['used'] = int(ret['total']) - int(ret['free'])
    return ret
 
 def proc_mounts():
    """
    Get /proc/mounts
    """
    with open('/proc/mounts', 'r') as mnt:
        ret = {}
        tmp = 0
        for i in mnt:
            sline = i.split()
            if 'dev' in str(sline[0]) :
                if sline[1] == '/':
                if sline[1] == '/home':
                if sline[1] == '/usr':
                if sline[1] == '/var':
                else:
                print sline[1]
    return ret
 
 def _test():
    # print disk_free(r'.')
    # print memory_free()
    print proc_mounts()
 
 if __name__ == '__main__':
    _test()

!color
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # author:Atsushi Sakai
 # license: MIT
  
 def Print(string, color, highlight=False):
    u"""
    Colored print
 
    colorlist:
        red,green,yellow,blue,magenta,cyan,white,crimson
 
    """
    end="\033[1;m"
    pstr=""
    if color == "red":
        if highlight:
            pstr+='\033[1;41m'
        else:
            pstr+='\033[1;31m'
    elif color == "green":
        if highlight:
            pstr+='\033[1;42m'
        else:
            pstr+='\033[1;32m'
    elif color == "yellow":
        if highlight:
            pstr+='\033[1;43m'
        else:
            pstr+='\033[1;33m'
    elif color == "blue":
        if highlight:
            pstr+='\033[1;44m'
        else:
            pstr+='\033[1;34m'
    elif color == "magenta":
        if highlight:
            pstr+='\033[1;45m'
        else:
            pstr+='\033[1;35m'
    elif color == "cyan":
        if highlight:
            pstr+='\033[1;46m'
        else:
            pstr+='\033[1;36m'
    elif color == "white":
        if highlight:
            pstr+='\033[1;47m'
        else:
            pstr+='\033[1;37m'
    elif color == "crimson":
        if highlight:
            pstr+='\033[1;48m'
        else:
            pstr+='\033[1;38m'
    else:
        print("Error Unsupported color:"+color)
 
    print(pstr+string+end)
 
 if __name__ == '__main__':
    Print("Red","red")
    Print("Green","green")
    Print("Yellow","yellow")
    Print("Blue","blue")
    Print("Magenta","magenta")
    Print("Cyan","cyan")
    Print("White","white")
    Print("Crimson","crimson")
    Print("Highlited Red","red",highlight=True)
    Print("Highlited Green","green",highlight=True)
    Print("Highlited Yellow","yellow",highlight=True)
    Print("Highlited blue","blue",highlight=True)
    Print("Highlited Magenta","magenta",highlight=True)
    Print("Highlited Cyan","cyan",highlight=True)
    Print("Highlited Crimson","crimson",highlight=True)

! Passwd
 https://docs.python.jp/3/library/pwd.html