wiki:Pythonの短いソースコード集

Version 21 (modified by nakiki, 13 years ago) (diff)

--

動かし方

  • テキストをコピーして、適当なファイル名を作ります。
  • python test.pyのように実行して動きを見てみるだけ。

スレッドを作る

import threading
import time

def process():
  while True:
    print 'x1'
    time.sleep(3)

th = threading.Thread(None, process, None)
th.setDaemon(True)
th.start()

while True:
  print 'x0'
  time.sleep(3)

外部コマンドの実行

import os

result = os.system('ls -al')
print result

数値から文字へ

n = 1000
nstr = str(n)
msg = '%s' % nstr
print msg

文字から数値へ

nstr = '1000'
n = int(nstr)
n += 1
print n

タプル

a = (1, 2, 3)
a1, a2, a3 = a
print a1
print a2
print a3

ソケット.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

ソケット.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

RPCサーバ

import SimpleXMLRPCServer

class Test:
  def inc1(self, value):
    return value + 1

  def inc2(self, value):
    return value + 2

  def inc3(self, value):
    return value + 3

if __name__ == '__main__':
  server = SimpleXMLRPCServer.SimpleXMLRPCServer(('127.0.0.1', 12346))
  server.register_instance(Test())
  server.serve_forever()
  • 関数呼び出しのイメージで処理が進められるので便利。
  • 特別なプロトコル自分で作る必要がない。

データの連結

s1 = 'sssssssss1'
s2 = 'sssssssss2'
s3 = 'sssssssss3'
s4 = 'sssssssss4'
l = [s1, s2, s3, s4]
print ''.join(l)
  • コピーを少なくしてデータを連結するため。

バッファ

s = '123456789abcdefgh'
x = buffer(s, 6, 2)
ss = str(x)
print ss
  • 長いデータの一部を取り出したり、見たりするときに便利。

バイナリデータを扱う

 packet = struct.pack("!HH", 500, 1)
 (l, x) = struct.unpack("!HH", packet[0:4])
 print l, x
  • ネットワークのパケット処理などに活躍します。

データの表示

print (data,)
  • printはタプルにして表示すると便利

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))

コマンド引数

import optparse

parser = optparse.OptionParser()
parser.add_option("-u",  "--user", dest="user", help= 'user name')
(options, args) = parser.parse_args()

if options.user:
  print options.user
else:
  print parser.print_help()
  • 自分で作らなくても便利なので最近利用しています。

gzipファイルの展開

import tarfile

tf = tarfile.TarFile.gzopen('test.dat.tar.gz', mode = 'r')
print tf.getmembers()
for l in tf.getmembers():
  tf.extract(l)

ftpクライアント

import ftplib

ftp = ftplib.FTP('yourhost')
ftp.login('user', 'xxxxx')
f = open('xxxx.exe', 'wb')
ftp.retrbinary('RETR xxxx.exe', f.write)
f.close()