トップ «前の日(02-05) 最新 次の日(02-07)» 追記

Masa's blog

検索キーワード:

2010年02月06日 スタイルシート(CSS)儂(わし)的解釈によるメモ

_ スタイルシート(CSS)儂(わし)的解釈によるメモ

例によって自分勝手な解釈、用語でメモメモっと...

サンプル

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>CSS sample</title>

<style TYPE="text/css">
<!--

ヘッダー部で定義する場合は<style>タグと<!--で開始。

/*
 * コメントも書けるよ
 */
H3, H4 {
    color: red;
    background: yellow
}

タグ(<h3><h4>)に対するスタイルの指定。

P.green {
    color: green;
}

タグ(<p>)に指定するクラス(class="green")に対するスタイルの指定。

ちなみに、タグ中に指定するクラスは class="hoge foo bar" のように複数指定が可能(2011.12.15 追記)。

また、

P.green span{
    color: green;
}

とした場合は、「class="green"を指定した<p>タグの内部の<span>タグ」に対するスタイル指定となる(2011.12.15 追記)。

*.red {
    color: red;
}

クラス(class="red")に対するスタイルの指定。

#blue {
    color: blue;
}

ID(id="blue")に対するスタイルの指定。

/* hover : マウスが乗った時
 * link : リンク
 * visited : クリック済のリンク
 * active : クリックされた時
 * focus : TABキーで選択された時
 */
:hover {
    color: blue;
}

疑似クラス(hover)に対するスタイルの指定(2011.12.15 追記)。

*.iro_shitei {
    color: red;
}

文字色の指定。

*.back_iro_shitei {
    background: #FF0000; /* #RRGGBB */
}

文字の背景色の指定。

*.soto_yohaku {
    /* margin: 3em; 下記の4つをまとめて指定する場合 */
    margin-top: 3em; /* 3文字の余白 */
    margin-bottom: 3em; /* 3文字の余白 */
    margin-right: 3em; /* 3文字の余白 */
    margin-left: 3em; /* 3文字の余白 */
    border: 1px solid gray;
}

マージンの指定。指定したタグの外側の余白幅。

*.uchi_yohaku {
    /* padding: 3em; 下記の4つをまとめて指定する場合 */
    padding-top: 3em; /* 3文字の余白 */
    padding-bottom: 3em; /* 3文字の余白 */
    padding-right: 3em; /* 3文字の余白 */
    padding-left: 3em; /* 3文字の余白 */
    border: 1px solid gray;
}

パディングの指定。指定したタグの内側の余白幅。

*.waku {
    /* border: 1px solid gray; 下記の4つをまとめて指定する場合 */
    border-top: 1px none red;
    border-bottom: 3px dotted green;
    border-right: 5px dashed blue;
    border-left: 7px double black;
}

枠線の指定。

*.hide {
    /* block, inline, list-item, none */
    display: none;
}

表示方法の指定

  • block : ブロック要素として表示
  • inline : インライン要素として表示
  • list-item : リストの要素として表示
  • none : 表示しない(領域も無くなる)
*.basyo_static {
    position: static; /* 既定の場所 */
    border: 1px solid gray;
}

表示位置の指定。デフォルトの位置。

*.basyo_abs {
    position: absolute; top: 2em; left: 4em;
    border: 1px solid gray;
}

指定したタグの親要素の左上を原点とする表示位置の指定。

*.basyo_rel {
    position: relative; top: 2em; left: 4em;
    border: 1px solid gray;
}

デフォルトの表示位置を原点とする位置指定。

*.basyo_fix {
    position: fixed; top: 2em; left: 4em;
    border: 1px solid gray;
    opacity: 0.5;                   /* for Firefox */
    filter: alpha(opacity=50);      /* for Internet Explorer */
    color: black;
    background-color: pink;
}

ブラウザの左上を原点とする表示位置の指定。スクロールの影響を受けない。IE6以前ダメ。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd">

上記のように、htmlファイルの先頭で <!DOCTYPE ...> 宣言していれば、IE7以降ではOK。

あと、ついでに opacity, filter を使って透明度を指定(背景が透けて見える)。

*.gazou_basyo {
    float: right; /* left, right, none */
    width: 120px;
    height: 90px;
}

右または左に回り込む位置指定。

*.invis {
    /* visible, hidden, inherit */
    visibility: hidden;
}

表示、非表示の指定。表示領域は保持される。

*.indent {
    text-indent: 1em;
    border: 1px solid gray;
}

字下げの指定。

*.text_basyo {
    text-align: center; /* left, right, center, inherit */
    border: 1px solid gray;
}

センタリング等の指定。

*.text_kazari {
    text-decoration: line-through; /* none, underline, overline, line-through, blink, inherit */
    border: 1px solid gray;
}

文字列飾りの指定。

*.table_cell {
    empty-cells: show; /* show, hide, inherit */
}

テーブルの空セルに対する枠表示の指定。

*.ime_on {
    ime-mode: active; /* auto, active, inactive, disabled */
}

かな漢字変換の指定

-->
</style>

-->, </style>で閉じる。

<link rel="stylesheet" type="text/css" href="csssample.css">

外部ファイル(csssample.css)にスタイルシートをまとめる事もできる。

</head>
<body>
<h1>CSS sample</h1>
<hr />
<h2>指定の仕方(その1)</h2>
タグに「style=」パラメータを指定して行う。
<blockquote>
一部だけ<span style="color:red;">赤文字</span>にしてみる。
</blockquote>

タグに直接スタイルを指定することもできる。

<hr />
<h2>指定の仕方(その2)</h2>
ヘッダー部分でタグのスタイルをまとめて指定する。
<blockquote>
一部だけ<h3>色を変えて</h3>みる。
</blockquote>
<hr />
<h2>指定の仕方(その3)</h2>
ヘッダー部分でタグに対応するクラスのスタイルをまとめて指定する。
<blockquote>
<p class="green">
段落全体の色を変えてみる。
</p>
</blockquote>
<hr />
<h2>指定の仕方(その4)</h2>
ヘッダー部分でクラスのスタイルをまとめて指定する。
<blockquote>
一部だけ<span class="red">色を変えて</span>みる。
</blockquote>
<hr />
<h2>指定の仕方(その5)</h2>
ヘッダー部分でIDのスタイルをまとめて指定する。
<blockquote>
一部だけ<span id="blue">色を変えて</span>みる。
</blockquote>
<hr />
<h2>指定の仕方(その6)</h2>
外部ファイルでスタイルをまとめて指定する。
<blockquote>
一部だけ<span class="blue_yellow">色を変えて</span>みる。
</blockquote>
<hr />
<h2>色の指定 color: (既出ですが)</h2>
<blockquote>
一部だけ<span class="iro_shitei">色を変えて</span>みる。
</blockquote>
<hr />
<h2>背景色の指定 background: (既出ですが)</h2>
<blockquote>
一部だけ<span class="back_iro_shitei">色を変えて</span>みる。
</blockquote>
<hr />
<h2>マージンの指定 margin(-top,-bottom,-right,-left):</h2>
<blockquote class="soto_yohaku">
マージンは外側の余白。
</blockquote>
<hr />
<h2>パディングの指定 padding(-top,-bottom,-right,-left):</h2>
<blockquote class="uchi_yohaku">
パディングは内側の余白。
</blockquote>
<hr />
<h2>枠の指定 border(-top,-bottom,-right,-left):</h2>
<blockquote class="waku">
ワクワクする枠...。
</blockquote>
<hr />
<h2>表示の仕方を指定 display:</h2>
<blockquote>
括弧の中は(<span class="hide">見えたら</span>)ダメ。
</blockquote>
<hr />
<h2>場所の指定 position: (static)</h2>
<blockquote>
場所の指定 <span class="basyo_static">static(既定の場所)</span>
</blockquote>
<hr />
<h2>場所の指定 position: (absolute)</h2>
<blockquote>
場所の指定 <span class="basyo_abs">absolute(親要素の左上を原点とする)</span>
</blockquote>
<hr />
<h2>場所の指定 position: (relative)</h2>
<blockquote>
場所の指定 <span class="basyo_rel">relative(規定の場所からの相対位置)</span>
</blockquote>
<hr />
<h2>場所の指定 position: (fixed IEダメ)</h2>
<blockquote>
場所の指定 <span class="basyo_fix">fixed(スクロールせずに絶対位置に固定。IEではダメ)</span>
</blockquote>
<hr />
<h2>レイアウト指定 float:</h2>
<img src="http://myh.no-ip.org/~m-ito/lib100/lib100_1.jpg" class="gazou_basyo" />
画像の説明がいろいろと入るわけですが、面倒なので適当な文章を入力してます。
<br style="clear: both;">
ここ以降は回り込みが解除されているはず。
<hr />
<h2>表示の仕方を指定 visibility:</h2>
<blockquote>
括弧の中は(<span class="invis">見えたら</span>)ダメ。
</blockquote>
<hr />
<h2>字下げ text-indent:</h2>
<blockquote class="indent">
字下げで表示。
</blockquote>
<hr />
<h2>文字の表示位置 text-align:</h2>
<blockquote class="text_basyo">
センタリングしてみました。
</blockquote>
<hr />
<h2>文字の飾り text-decoration:</h2>
<blockquote>
<span class="text_kazari">打ち消し線。</span>
</blockquote>
<hr />
<h2>テーブルの枠を常に表示 empty-cells: (IEダメ?)</h2>
<table border="1" class="table_cell">
<tr><th>header1</th><th></th><th>header3</th></tr>
<tr><td></td><td>data12</td><td></td></tr>
<tr><td>data21</td><td></td><td>data23</td></tr>
</table>
<hr />
<h2>日本語変換 ime-mode: (IE限定)</h2>
<blockquote>
<input type="text" class="ime_on" />
</blockquote>
</body>
</html>

2016年02月06日 My first python programming

_ My first python programming

stdio

$ cat p001_stdio.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys

print 'This is a string'

input_string = raw_input('Input: ')
print 'input_string is a (' + input_string + ')'

sys.stdout.write('Input: ')
rec = sys.stdin.readline()
rec = rec.rstrip('\r\n')
sys.stdout.write('rec is a (%s)\n' % (rec))
$ ./p001_stdio.py
This is a string
Input: My first python programming
input_string is a (My first python programming)
Input: はじめてのパイソン
rec is a (はじめてのパイソン)

variable

$ cat p002_variable.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

#
# No need define for using variable.
# Variable is defined, when initialize.
#

var_str1 = 'ascii_string'
var_str2 = u'漢字の文字列です'
var_int= 123
var_real = 123.456

print 'var_str1 is a ' + var_str1
print 'var_str2 is a ' + var_str2.encode('UTF-8')
print 'var_int is a %d' % (var_int)
print 'var_real is a %7.3f' % (var_real)
$ ./p002_variable.py
var_str1 is a ascii_string
var_str2 is a 漢字の文字列です
var_int is a 123
var_real is a 123.456

array

$ cat p003_array.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

var_array = ('ascii_string', 123, u'漢字文字列', 456.789)

print 'var_array[0] is a %s' % (var_array[0])
print 'var_array[1] is a %s' % (var_array[1])
print 'var_array[2] is a %s' % (var_array[2].encode('UTF-8'))
print 'var_array[3] is a %s' % (var_array[3])

var_hash = {'lemon':'yellow', 'strawberry':'red', 'orange':'orange'}

print 'var_hash["lemon"] is a %s' % (var_hash['lemon'])
print 'var_hash["strawberry"] is a %s' % (var_hash['strawberry'])
print 'var_hash["orange"] is a %s' % (var_hash['orange'])
$ ./p003_array.py
var_array[0] is a ascii_string
var_array[1] is a 123
var_array[2] is a 漢字文字列
var_array[3] is a 456.789
var_hash["lemon"] is a yellow
var_hash["strawberry"] is a red
var_hash["orange"] is a orange

operator

$ cat p004_operator.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

print "'abc' + 'def' is a %s" % ('abc' + 'def')
print "'abc' * 2 is a %s" % ('abc' * 2)

print "100 + 200.123 is %7.3f" % (100 + 200.123)
print "200.123 - 100 is %7.3f" % (200.123 - 100)
print "100 * 1.08 is %d" % (100 * 1.08)
print "1 / 3 is %f" % (1 / 3)
print "1.0 / 3 is %f" % (1.0 / 3)
print "3 ** 2 is %d" % (3 ** 2)
print "7 %% 5 is %d" % (7 % 5)

print "0x10 | 0x1 is 0x%02x" % (0x10 | 0x1)
print "0x81 & 0x7f is 0x%02x" % (0x81 & 0x7f)
print "0xFF ^ 0xF0 is 0x%02x" % (0xFF ^ 0xF0)
$ ./p004_operator.py
'abc' + 'def' is a abcdef
'abc' * 2 is a abcabc
100 + 200.123 is 300.123
200.123 - 100 is 100.123
100 * 1.08 is 108
1 / 3 is 0.000000
1.0 / 3 is 0.333333
3 ** 2 is 9
7 % 5 is 2
0x10 | 0x1 is 0x11
0x81 & 0x7f is 0x01
0xFF ^ 0xF0 is 0x0f

if

$ cat p005_if.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

wk1 = 'abc'
wk2 = 'def'

if wk1 == wk2:
	print '%s == %s\n' % (wk1, wk2)
elif wk1 > wk2:
	print '%s > %s\n' % (wk1, wk2)
else:
	print '%s < %s\n' % (wk1, wk2)

if wk1 != wk2:
	print '%s is not %s\n' % (wk1, wk2)
else:
	print '%s is equal to %s\n' % (wk1, wk2)

if (wk1 == 'abc' and
    wk2 == 'def'):
	print '%s is abc and %s is def\n' % (wk1, wk2)
else:
	print '%s is not abc or %s is not def\n' % (wk1, wk2)
$ ./p005_if.py
abc < def

abc is not def

abc is abc and def is def

while

$ cat p006_while.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys

rec = sys.stdin.readline()
while rec:
	rec = rec.rstrip('\r\n')
	sys.stdout.write('output = (%s)\n' % (rec))
	rec = sys.stdin.readline()
$ ./p006_while.py
My first python programming
output = (My first python programming)
はじめてのパイソン
output = (はじめてのパイソン)

for

$ cat p007_for.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

var_array = (123, 'abc', u'あいう', 456.789)

for i in var_array:
	if isinstance(i, unicode):
		print i.encode('UTF-8')
	else:
		print i

var_hash = {'lemon':'yellow', 'strawberry':'red', 'orange':'orange'}

for i in var_hash:
	print 'var_hash["%s"] is a %s' % (i, var_hash[i])

for i in sorted(var_hash.keys()):
	print 'var_hash["%s"] is a %s' % (i, var_hash[i])
$ ./p007_for.py
123
abc
あいう
456.789
var_hash["orange"] is a orange
var_hash["strawberry"] is a red
var_hash["lemon"] is a yellow
var_hash["lemon"] is a yellow
var_hash["orange"] is a orange
var_hash["strawberry"] is a red

file

$ cat p008_file.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

f = open('p008_file.txt', 'w')
f.write('line 1\n')
f.write('line 2\n')
f.write('line 3\n')
f.close()

f = open('p008_file.txt', 'r')
rec = f.readline()
while rec:
	rec = rec.rstrip('\r\n')
	print rec
	rec = f.readline()
f.close()
$ ./p008_file.py
line 1
line 2
line 3
$ cat p008_file.txt
line 1
line 2
line 3

regex

$ cat p009_regex.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import re

if re.search('^abc.*def$', 'abcpoipoidef'):
	print 'True'
else:
	print false

print re.sub('abc(.*)def$', r'ABC\1DEF', 'abcpoipoidef')

for i in re.split('p.*i', 'abcpoipoidef'):
	print i
$ ./p009_regex.py
True
ABCpoipoiDEF
abc
def

string

$ cat p010_string.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

var_str = u'abcあいうdef'

print var_str[1]
print var_str[3].encode('UTF-8')
print var_str[3:6].encode('UTF-8')

print len(var_str)

list = ('abc', 123, u'あいう', 123.456)
var_str = 'str1 = %s, num1 = %d, str2 = %s num2 = %7.3f\n' % list
print var_str.encode('UTF-8')

i = 0
while i < len(list):
	if isinstance(list[i], unicode):
		print list[i].encode('UTF-8')
	else:
		print list[i]
	i += 1
$ ./p010_string.py
b
あ
あいう
9
str1 = abc, num1 = 123, str2 = あいう num2 = 123.456

abc
123
あいう
123.456

function

$ cat p011_function.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys

def add(i1, i2):
	return i1 + i2

def printf(format, *list):
	sys.stdout.write(format % list)

printf('%d + %d is %d\n', 10, 20, add(10, 20))


 $ ./p011_function.py
 10 + 20 is 30

try

$ cat p012_try.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys

try:
	print 1 / 0
except ZeroDivisionError:
	print u'ゼロ割りエラー発生!'.encode('UTF-8')

print u'終了'.encode('UTF-8')

try:
	print 1 / 0
except:
	print u'エラー発生!'.encode('UTF-8')
	print sys.exc_info()[0]

print u'終了'.encode('UTF-8')
$ ./p012_try.py
ゼロ割りエラー発生!
終了
エラー発生!
<type 'exceptions.ZeroDivisionError'>
終了

day and time

$ cat p013_daytime.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import time

daytime = time.strftime('%Y.%m.%d(%w) %H:%M:%S')
print daytime

struct_time = time.strptime(daytime, '%Y.%m.%d(%w) %H:%M:%S')
print struct_time

epoch_sec = time.mktime(struct_time) + (24 * 60 * 60)
struct_time = time.localtime(epoch_sec)
daytime = time.strftime('%Y.%m.%d(%w) %H:%M:%S', struct_time)
print daytime
$ ./p013_daytime.py
2016.02.06(6) 00:47:37
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=6, tm_hour=0, tm_min=47, tm_sec=37, tm_wday=5, tm_yday=37, tm_isdst=-1)
2016.02.07(0) 00:47:37

filesystem

$ cat p014_filesystem.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import shutil

tmppath = 'p014_filesystem.tmp'

os.mkdir(tmppath)

if os.path.exists(tmppath):
	print "指定のファイルもしくはディレクトリが存在しています。"

	if os.path.isfile(tmppath):
		print "指定のパスはファイルです。"

	if os.path.isdir(tmppath):
		print "指定のパスはディレクトリです。"

os.rmdir(tmppath)
#shutil.rmtree(tmppath)

f = open(tmppath, 'w')
f.write("line1\n")
f.close()

if os.path.exists(tmppath):
	print "指定のファイルもしくはディレクトリが存在しています。"

	if os.path.isfile(tmppath):
		print "指定のパスはファイルです。"

	if os.path.isdir(tmppath):
		print "指定のパスはディレクトリです。"

os.unlink(tmppath)

print 'current working directory is ' + os.getcwd()

for i in os.listdir("."):
	if os.path.isfile(i):
		print i + "はファイルです。"
	elif os.path.isdir(i):
		print i + "はディレクトリです。"
	else:
		print i + "は不明です。"
$ ./p014_filesystem.py
指定のファイルもしくはディレクトリが存在しています。
指定のパスはディレクトリです。
指定のファイルもしくはディレクトリが存在しています。
指定のパスはファイルです。
current working directory is /home/m-ito/tmp/python
p011_function.pyはファイルです。
p002_variable.pyはファイルです。
p016_client.pyはファイルです。
p001_stdio.pyはファイルです。
p010_string.pyはファイルです。
p017_sqlite.pyはファイルです。
p006_while.pyはファイルです。
p016_single_server.pyはファイルです。
p009_regex.pyはファイルです。
p004_operator.pyはファイルです。
p007_for.pyはファイルです。
p005_if.pyはファイルです。
p016_multi_server.pyはファイルです。
p008_file.pyはファイルです。
p014_filesystem.pyはファイルです。
p012_try.pyはファイルです。
p003_array.pyはファイルです。
p008_file.txtはファイルです。
p017_sqlite.dbはファイルです。
p015_class.pyはファイルです。
p013_daytime.pyはファイルです。

class

$ cat p015_class.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

class MySwitch(object):
	def __init__(self):
		self.intSw = 0

	def turnOn(self):
		self.intSw = 1

	def turnOff(self):
		self.intSw = 0

	def isOn(self):
		return (self.intSw == 1)

	def isOff(self):
		return not isOn(self)

class MyToggleSwitch(MySwitch):
	def __init__(self):
		super(MyToggleSwitch, self).__init__()

	def toggle(self):
		if super(MyToggleSwitch, self).isOn():
			super(MyToggleSwitch, self).turnOff()
		else:
			super(MyToggleSwitch, self).turnOn()

oSw = MySwitch()

if oSw.isOn():
	print 'oSw is ON'
else:
	print 'oSw is OFF'

oSw.turnOn()

if oSw.isOn():
	print 'oSw is ON'
else:
	print 'oSw is OFF'

oToggleSw = MyToggleSwitch()

if oToggleSw.isOn():
	print 'oToggleSw is ON'
else:
	print 'oToggleSw is OFF'

oToggleSw.toggle()

if oToggleSw.isOn():
	print 'oToggleSw is ON'
else:
	print 'oToggleSw is OFF'

oToggleSw.toggle()

if oToggleSw.isOn():
	print 'oToggleSw is ON'
else:
	print 'oToggleSw is OFF'
$ ./p015_class.py
oSw is OFF
oSw is ON
oToggleSw is OFF
oToggleSw is ON
oToggleSw is OFF

client

$ cat p016_client.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import socket
import sys

HOST = '127.0.0.1'
PORT = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while 1:
	msg = raw_input()
	s.send(msg)
	data = s.recv(1024)
	print data
s.close()

server(single)

$ cat p016_single_server.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import socket
import os
import sys
import signal

pid = os.fork()
if pid < 0:
	sys.exit(1)
if pid > 0:
	sys.exit(0)
os.setsid()
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
signal.signal(signal.SIGHUP, signal.SIG_IGN)
pid = os.fork()
if pid < 0:
	sys.exit(1)
if pid > 0:
	sys.exit(0)
os.umask(0)
os.chdir("/")
os.close(0)
os.close(1)
os.close(2)

HOST = '127.0.0.1'
PORT = 12345
BACKLOG = 10
BUFSIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(BACKLOG)
while 1:
	(conn, addr) = s.accept()
	data = conn.recv(BUFSIZE)
	while data:
		conn.send(data )
		data = conn.recv(BUFSIZE)
	conn.close()

server(multi)

$ cat p016_multi_server.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import socket
import os
import sys
import signal

pid = os.fork()
if pid < 0:
	sys.exit(1)
if pid > 0:
	sys.exit(0)
os.setsid()
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
signal.signal(signal.SIGHUP, signal.SIG_IGN)
pid = os.fork()
if pid < 0:
	sys.exit(1)
if pid > 0:
	sys.exit(0)
os.umask(0)
os.chdir("/")
os.close(0)
os.close(1)
os.close(2)

HOST = '127.0.0.1'
PORT = 12345
BACKLOG = 10
BUFSIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(BACKLOG)
while 1:
	(conn, addr) = s.accept()
	pid = os.fork()
	if pid == 0:
		data = conn.recv(BUFSIZE)
		while data:
			conn.send(data)
			data = conn.recv(BUFSIZE)
		conn.close()
		sys.exit(0)
	else:
		conn.close()

sqlite3

$ cat p017_sqlite.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3
import os
import sys

dbfile = './p017_sqlite.db'
try:
	os.unlink(dbfile)
except OSError as e:
	print 'OSError(%d)(%s)(%s)' % (e.errno, e.strerror, dbfile)
except:
	print sys.exc_info()[0]
	sys.exit(1)
conn = sqlite3.connect(dbfile)
c = conn.cursor()

print u'テーブルを作成する'.encode('UTF-8')
c.execute('''
	create table t_test (
		id text primary key,
		name text,
		syozoku text
	)
	'''
)
conn.commit()

print u'初期データセットアップ'.encode('UTF-8')
c.execute('''begin''')
init_data = (
	('001', u'山田 太郎', u'本社'),
	('002', u'山田 花子', u'営業第1課'),
	('003', u'山田 次郎', u'営業第2課')
)
for i in init_data:
	c.execute('''
		insert into t_test
			(id, name, syozoku)
			values(?, ?, ?)
		''',
		i
	)
conn.commit()

print u'初期データセットアップ2'.encode('UTF-8')
c.execute('''begin''')
init_data = (
	('001', u'山田 太郎', u'本社'),
	('002', u'山田 花子', u'営業第1課'),
	('003', u'山田 次郎', u'営業第2課')
)
for i in init_data:
	try:
		c.execute('''
			insert into t_test
				(id, name, syozoku)
				values(?, ?, ?)
			''',
			i
		)
	except sqlite3.IntegrityError:
		print '2重キーなので追加できません(%s)' % (i[0])
	except:
		print sys.exc_info()[0]
		sys.exit(1)
conn.commit()

print u'全件検索'.encode('UTF-8')
c.execute('''begin''')
c.execute('''select * from t_test''')
for row in c:
	print ('%s,%s,%s' % row).encode('UTF-8')

print u'〜課のみ検索'.encode('UTF-8')
c.execute('''select * from t_test where syozoku like ?''', (u'%課',))
for row in c:
	print ('%s,%s,%s' % row).encode('UTF-8')

print u'id=001を山田 三郎に更新'.encode('UTF-8')
c.execute('''update t_test set name = ? where id = ?''', (u'山田 三郎', '001'))
c.execute('''select * from t_test where id = ?''', ('001',))
for row in c:
	print ('%s,%s,%s' % row).encode('UTF-8')
conn.commit()

print u'id=002を削除'.encode('UTF-8')
c.execute('''begin''')
c.execute('''delete from t_test where id = ?''', ('002',))
c.execute('''select * from t_test''')
for row in c:
	print ('%s,%s,%s' % row).encode('UTF-8')

print u'ロールバック'.encode('UTF-8')
conn.rollback()

print u'全件検索 by fetchone()'.encode('UTF-8')
c.execute('''begin''')
c.execute('''select * from t_test''')
row = c.fetchone()
while row:
	print ('%s,%s,%s' % row).encode('UTF-8')
	row = c.fetchone()
conn.commit()
c.close()
$ ./p017_sqlite.py
テーブルを作成する
初期データセットアップ
初期データセットアップ2
2重キーなので追加できません(001)
2重キーなので追加できません(002)
2重キーなので追加できません(003)
全件検索
001,山田 太郎,本社
002,山田 花子,営業第1課
003,山田 次郎,営業第2課
〜課のみ検索
002,山田 花子,営業第1課
003,山田 次郎,営業第2課
id=001を山田 三郎に更新
001,山田 三郎,本社
id=002を削除
001,山田 三郎,本社
003,山田 次郎,営業第2課
ロールバック
全件検索 by fetchone()
001,山田 三郎,本社
002,山田 花子,営業第1課
003,山田 次郎,営業第2課

argument

$ cat p018_args.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys

print 'sys.argv=', sys.argv
print 'len(sys.argv)=(%d)' % (len(sys.argv))

i = 0
while i < len(sys.argv):
        print 'sys.argv[%d]=%s' % (i, sys.argv[i])
        i += 1

for i in sys.argv:
        print i
$ ./p018_args.py argv1 引数2 argv3 引数4
sys.argv= ['./p018_args.py', 'argv1', '\xe5\xbc\x95\xe6\x95\xb02', 'argv3', '\xe5\xbc\x95\xe6\x95\xb0\xef\xbc\x94']
len(sys.argv)=(5)
sys.argv[0]=./p018_args.py
sys.argv[1]=argv1
sys.argv[2]=引数2
sys.argv[3]=argv3
sys.argv[4]=引数4
./p018_args.py
argv1
引数2
argv3
引数4