Pythonのバージョンを取得するだけのお話

Pythonのバージョンを取得しなければならなくなった。
まあ、シェルからこうやればいいじゃん。

$ python -V
Python 2.6.5

そうだね、シェルからならね…

実はPythonスクリプト実行中にテメーが動いているPythonのバージョンを取得したいのだ。
さてはて、os.system()なんて禍々しくもマヌケで恐ろしいことをしなければダメなのかとも思ったが、そんな訳はないとグーグル様にお伺いを立ててみたところ、ちゃんと用意してあるじゃんと解決。
sysモジュールversion_infoを使えばいいんだ。

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.version_info
(2, 6, 5, 'final', 0)

ふぅ、ちゃんと取れたぜ。マヌケなことをせずに済んだ…

catコマンドだけでUUID4を生成できる不思議

Linuxで/dev/urandomを激しく読みまくる処理をさせるため、エントロピーを確認しようと思い立ち、cat /proc/sys/kernel/random/ まで打ち込んで、はてエントロピーはどのファイルで確認できるんだっけ? ということでtabキーでファイル名を確認しようとした。

$ cat /proc/sys/kernel/random/
boot_id                 poolsize                uuid
entropy_avail           read_wakeup_threshold   write_wakeup_threshold

ふむ、entropy_availだったね。
…なのだが、すごく気になるファイル名が。uuidって?
まさか、と思った次の瞬間にやってしまった。

$ cat /proc/sys/kernel/random/uuid
d0e522f7-217a-4c24-95d2-ec83a00ce173

こ、これはUUID4! なんとcatコマンドだけでUUID4が生成できる!
ちゃんと毎回違うのが返るのかチェック。

$ cat /proc/sys/kernel/random/uuid
c78913b7-2a6a-43dd-8e49-092270436f60
$ cat /proc/sys/kernel/random/uuid
e385571b-9f62-4015-9202-e85f9b899fc5
$ cat /proc/sys/kernel/random/uuid
c76dff26-b918-42ed-8784-9b5e58d0ac3e
$ cat /proc/sys/kernel/random/uuid
1bf58af5-abe0-4ecd-aacb-eb3c4df3b4c6
$ cat /proc/sys/kernel/random/uuid
098e7ed1-4e55-445d-a4e1-dcbbc9a8c13c

すげー、ちゃんとUUID4だ。
ここまで来ると、ちゃんと/dev/urandomあたりを使って生成しているか気になりますね。
つーことで、UUID4生成前のentropy_availの値を見てみた。

$ cat /proc/sys/kernel/random/entropy_avail
2816
$ cat /proc/sys/kernel/random/uuid
bbedd745-6d4f-486b-bd02-c3c16dbf3e5c
$ cat /proc/sys/kernel/random/uuid
de5e6910-3fc4-4931-b809-8acf1f315710
$ cat /proc/sys/kernel/random/uuid
df24e0a8-fb8f-465a-b539-4a6e64d73e55
$ cat /proc/sys/kernel/random/entropy_avail
1536

値が2816→1536と減ったので、きっと/dev/urandomあたりから作ってるくさいね。
さすがにカーネルソース読んで確認する元気はないので、それは元気な若者に任せますw

Pythonに組み込まれたSQLite3のバージョンを知る方法

ふつーSQLite3のバージョンはコマンドラインで簡単にわかりますね。

$ sqlite3 -version

それではPythonに組み込まれているSQLite3のバージョンを確認する方法は?

きっとsqlite3モジュールのversion()とかで取れるんじゃねーかと思い、チャレンジしてみた。

>>> import sqlite3
>>> sqlite3.version
'2.6.0'

おいおい、SQLite3だろ、と思ったけど、これはPythonのsqlite3モジュールのバージョンだったよ。てへぺろ。

ということで、今度はSQL経由で調べられるはずだ、と思いつき、まじめにSQLite3のドキュメントを読んで見つけた。
selectでsqlite_version()を使え!
ということで、こうなりました。

>>> import sqlite3
>>> con = sqlite3.connect(':memory:')
>>> con.execute('select sqlite_version()').fetchone()
(u'3.7.7',)

やったぜ、3.7.7だぜ。

ムダに時間を費やした割には、あんまり使い道がないネタでございました。

PythonでGmailにメール送信してみた

Pythonでメールを送信する簡単なお仕事があったので、自分用メモ。
気付いたら自分のメール環境はGmail依存になっていて、SMTPサーバがGmailの奴しかなかった。
ということはSMTP over SSL。STARTTLS!
ふつーのSMTPサーバならいくらでも相手したことあるけど、こいつははじめてだぜ。ヒャッハー。
グーグル様にお伺いを立ててみたところ、Pythonでは最初から対応してた。
smtplibemailを使えば、実に簡単に書けちゃった。
コードはこんな感じでOK。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header

# gmailにログインするときのメールアドレス
gmail_address = 'hoge@sample.co.jp'
# gmailにログインするときのパスワード(とっても危険)
gmail_passwd = 'password'

# gmailのSMTPサーバアドレス
gmail_smtp_address = 'smtp.gmail.com'
# gmailのSMTPサーバポート番号
gmail_smtp_port = 587

# 送信元メールアドレス
from_address = 'sender@sample.co.jp'
# 送信先メールアドレスのリスト
to_address = ['recipient1@sample.co.jp', 'recipient2@sample.co.jp', ]

# 件名
subject = u'日本語サブジェクト'

# メール本文
body = u'''
ボディも日本語だよ。
改行も大丈夫だよ。
'''

msg = MIMEText(body.encode('iso-2022-jp'), 'plain', 'iso-2022-jp')
msg['From'] = from_address
msg['To'] = ', '.join(to_address)
msg['Date'] = formatdate()
msg['Subject'] = Header(subject.encode('iso-2022-jp'), 'iso-2022-jp')

smtpobj = smtplib.SMTP(gmail_smtp_address, gmail_smtp_port)
smtpobj.ehlo()
smtpobj.starttls() # こっからSSL
smtpobj.ehlo()
smtpobj.login(gmail_address, gmail_passwd) # ログイン
smtpobj.sendmail(from_address, to_address, message.as_string()) # 送信
smtpobj.close()

日本語対応でちょっと躓いたケド、MIMETextに渡す時に、はじめからISO-2022-JPに変換してエンコードを明示してやればいい。
UTF-8がいい、という人はUTF-8にしてね。

さくらのVPSに引っ越してWordPressを使ってみた

いままではてなダイアリーで書いていたこのblogですが、ドメインmitakadai.meを動かしているサーバをさくらのVPSに引っ越すのと一緒にWordPressに移行した。
タイミング的にレンタルサーバの乗り換えがあったので、一緒にやっちまったぜ。
WordPress初挑戦ですが、ちゃんと使えるかしら。