月別アーカイブ: 2012年6月

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だぜ。

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