トップ 差分 一覧 ソース 検索 ヘルプ 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