読者です 読者をやめる 読者になる 読者になる

Pythonで学ぶ「詳解 UNIXプログラミング」(その10) 第10章 シグナル

10.1 SIGUSR1とSIGUSR2を捕捉する簡単なプログラム import signal def sigusr(signo, frame): # one signal handler for both signals print "received", "SIGUSR1" if signo == signal.SIGUSR1 else "SIGUSR2" signal.signal(signal.SIGUSR1, sigusr) signa…

Pythonで学ぶ「詳解 UNIXプログラミング」(その9) 第9章 プロセスの関係

9.1 オーファンドプロセスグループの作成 import sys, os, time, signal, traceback def pr_ids(name): print "{0} pid={1} ppid={2} pgrp={3}".format( name, os.getpid(), os.getppid(), os.getpgrp()) def sig_hup(signum, frame): print "SIGHUP receive…

Pythonで学ぶ「詳解 UNIXプログラミング」(その8) 第8章 プロセス制御

8.1 fork関数の例 import sys, os, time glob = 6 buf = "a write to stdout\n" STDOUT_FILENO = sys.stdout.fileno() def main(): global glob var = 88 # automatic variable on the stack os.write(STDOUT_FILENO, buf) # we don't flush stdout print "b…

Pythonで学ぶ「詳解 UNIXプログラミング」(その7) 第7章 プロセスの環境

7.1 終了ハンドラの例 import atexit def my_exit1(): print "first exit handler" def my_exit2(): print "second exit handler" atexit.register(my_exit2) atexit.register(my_exit1) atexit.register(my_exit1) print "main is done" Python 2.6以降では…

Pythonで学ぶ「詳解 UNIXプログラミング」(その6) 第6章 システムデータファイルと情報

6.1 getpwnam関数 import pwd def getpwnam(name): for rec in pwd.getpwall(): if rec.pw_name == name: return rec パスワードファイル関連の関数はpwdモジュール、シャドウパスワード関連の関数はspwdモジュール、グループファイル関連の関数はgrpモジュ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ

5.1 getc()とputc()を用いて標準出力へコピーする import sys while True: c = sys.stdin.read(1) if not c: break sys.stdout.write(c) 5.2 fgets()とfputs()を用いて標準出力へコピーする import sys for line in sys.stdin: sys.stdout.write(line) Pytho…

Pythonで学ぶ「詳解 UNIXプログラミング」(その4) 第4章 ファイルとディレクトリ

4.1 指定したファイルの種類を出力する import sys, os, stat for filename in sys.argv[1:]: print "{0}:".format(filename), try: st = os.lstat(filename) except Exception, e: sys.exit("lstat error") mode = st[stat.ST_MODE] if stat.S_ISREG(mode):…

UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング

最近、ときどきTwitterで「Python」を検索して眺めていたのだが、Pythonの分かりにくいところとして「UnicodeDecodeErrorが出てうざい」という不満をよく見かけるようだ。 確かに、Pythonでは、数字やアルファベット以外のユニコード文字を使おうとすると、…

Pythonで学ぶ「詳解 UNIXプログラミング」(その3) 第3章 ファイル入出力

3.1 標準入力ファイルがシーク可能で有るかどうかを調べる import os try: os.lseek(0,0,os.SEEK_CUR) except OSError: print "cannot seek" else: print "seek OK" lseek()が失敗すると、OSError例外が発生する。 3.2 lseek()でファイル内部に間隙を作成す…

Pythonで学ぶ「詳解 UNIXプログラミング」(その2) 第2章 UNIXの標準化と実装

2.1 sysconfとpathconfの定義値を出力する import os, sys for name in sorted(os.sysconf_names): try: value = os.sysconf(name) except OSError: value = "(not defined)" print name, value for name in sorted(os.pathconf_names): try: value = os.pat…

Pythonで学ぶ「詳解 UNIXプログラミング」(その1) 第1章 概論

1.1 ディレクトリ内の全てのファイルをリストする import sys, os if len(sys.argv) != 2: sys.exit("a single argument (the directory name) is required") try: filenames = os.listdir(sys.argv[1]) except OSError: sys.exit("can't open {0}".format(s…

Pythonで学ぶ「詳解 UNIXプログラミング」(その0)

お勧めのUNIXプログラミングの入門書は?と聞かれれば誰もが挙げるであろう名著 W.リチャード スティーヴンスの詳解 UNIXプログラミング(APUE)。必読書と言っても良いだろう。"Pythonで学ぶ「詳解 UNIXプログラミング」"シリーズのエントリでは、私自身の復…

【お詫びして訂正】Pythonの粗大ゴミ

昨夜、Pythonの粗大ゴミというエントリを書いたが、このエントリを公開し、風呂に入ってさて寝ようとした時、ふと気になったことがあった。try-finally付きのジェネレータがgcで解放されないのなら、withブロックも一緒ではないだろうか?あの記事は昔ジェネ…

あなたの知らないPythonのひみつ

Pythonでは、ループ・try・withブロックは最大20までしかネストできない。 >>> def spam(): ... while 1: ... while 2: ... while 3: ... while 4: ... while 5: ... while 6: ... while 7: ... while 8: ... while 9: ... while 10: ... while 11: ... whil…

Pythonの粗大ゴミ

なんかgcネタが続いてしまうが、先日のPython Hack-a-thon で発表した中で、「ジェネレータオブジェクトが解放されない場合がある」というのは、あまり知られていないようだ。Python公式ドキュメントを確認してみると、どうやらこちらにも書かれていない。知…

Re:Re: Pythonのガベージコレクタは「マーク&スイープ」

おお、ガベージコレクションのアルゴリズムと実装 の著者様からコメントが。補足ありがとうございます。私は別にGC全般に詳しいわけでもなんでもないのですが、どうやら大嘘を書いてるということもなさそうな感じなので安心しましたw。 これは「参照カウン…

Pythonのガベージコレクタは「マーク&スイープ」?

昨日公開した Pythonのガベージコレクション にこんな突っ込みをいただいた。 マークアンドスイープGCじゃないそうです PythonのGarbageCollection http://www.narihiro.info/translate/garbage_collection_for_python_jp.html 確かに、Pythonで使用している…

Pythonのガベージコレクション

Python Hack-a-thon 2011/2/19 の発表資料PythonのガベージコレクションView more presentations from atsuoishimoto.

Pythonで正しく日本語を eval する

@atsuoishimoto s = eval(compile(u"""'あいう'""")) すると、 s はWindowsでもUTF-8でエンコードされた文字列になっちゃうんですよ。2011-02-15 08:26:31 via TweetDeck to @atsuoishimoto これはしたり!ちっとも気がつかなかった!普通のアプリ書いてると…

Pythonの型と二つのクラス、そしてインスタンス

Python Hack-a-thon 2011.02 のLTで使う資料を書いていてふと思い出したのが、Pythonでは厳密に言えば「クラスから生成したオブジェクト」を一言で表現する用語が無いのでめんどくさい、という話である。C++などでは「インスタンス」と言ってしまえばお仕舞…

音声読み上げTwitterクライアントできた

追記: 音声読み上げTwitterクライアントはWindows用アプリとして公開しました。http://d.hatena.ne.jp/atsuoishimoto/20110421/1303312754 をご参照ください。 先日の PyCon mini JP で見た スクリーンリーダNVDA のデモが非常に印象的だったので、ちょっと…

Python mini JP に行ってきた

昨日は PyCon mini JP が開催され、実に楽しい一日を過ごすとこができた。とはいえ、私は基調講演という大役を仰せつかっており、自分の出番が終わるまでは楽しむどころでは無かったが。この時使用した私のスライドはこちら:Slide at PyCon mini JP on 2011…

Pythonの特殊メソッド

Python関連のブログやTwitterでの発言を見ていると、ときどき obj() は obj.__call__() のシンタックスシュガー とか、 len(obj) は、 obj.__len__() と同じ というような発言を見かけるとこがある。本当だろうか? obj() は obj.__call__() のシンタックス…

Pythonの進化を支えるもの

プログラム言語 Python はまもなくリリース以来20年を迎え、現在では世界でもっともよく使われている言語の一つへと成長しました。Python はすばらしいプログラム言語ですが、プログラム言語が広く普及するためには、単に優れた言語であるというだけでは不十…

Pythonでデータ定義行のファイル名と行番号を手に入れる

ふと思いついたので書いておく。Pythonでデータ定義行のファイル名と行番号を手に入れる - 清水川Web では、Pythonでデータの定義位置を記録する方法として、データ生成用の関数を作ってその中でデータの定義位置を記録する方式が提案されている。このように…

Cython 演習問題 解説

Cython 演習問題 演習1 素数判定 整数の簡単な演算を中心とした処理だが、このような処理を拡張モジュール化する場合の効果を確認してみよう。まず、演習1-(A)のスクリプトをそのままCythonを使用して拡張モジュール化した場合では、 # Python版 $python -…

Cython 演習問題

演習1 - 素数判定 (A) 以下のPythonスクリプトを作成し、 primes(1000) の実行に必要な処理時間を測定せよ。 def primes(kmax): p = [0] * kmax result = [] k = 0 n = 2 while k < kmax: i = 0 while i < k and n % p[i] <> 0: i = i + 1 if i == k: p[k] =…

Python3.1の Unicode ファイル名

パソコンを使う人なら誰でも"ファイル名"というのを知ってるし、プログラマなら誰でもファイル名を使ったファイル操作は基礎として学んでいる。しかし、21世紀の今日ですら、時としてファイル名とはやっかいな問題となりうるのだ。Python3では、文字列オブジ…

クロージャのひみつ

やっとPythonのクロージャの仕組みを少しは理解した件 で、清水川先生がクロージャを返すとき実行中のフレームオブジェクトが保存されるのか?という疑問を呈されている。結論から言うと、フレームオブジェクトは保存されず、クロージャが必要とするオブジェ…

亡きオウムに捧げる50の言葉

文字列定数 'Dead Parrot' '''Dead Parrot''' r'''Dead Parrot''' "Dead Parrot" """Dead Parrot""" r"""Dead Parrot""" "Dead" " " "Parrot" "Dead \ Parrot" "Dead" \ " " \ "Parrot" "\x44\x65\x61\x64\x20\x50\x61\x72\x72\x6f\x74" "\104\145\141\144\4…

The Zen of Python 解題 - 後編

The Zen of Python 解題 - 前編 "The Zen of Python" の役割 "The Zen of Python" は Tim Peters氏が1999年に「Pythonらしさとはなにか?」と問われて書き上げたものであることは前述した。Python 2.0 のリリースに向けて活発に開発が進められていたころであ…

The Zen of Python 解題 - 前編

The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability count…

pyjf - python library for Japanese language

日本語エンコーディング変換ライブラリ pykf も開発以来10年を超え、さすがにいろいろと古くなってきた。ぼちぼち大幅に手を入れようかと検討してみると、どうも原型がなくなるぐらい修正が入りそうな気配。それでは、ということで pykf はそのままにして、…

スタティックメソッドは要らない子? - その2

http://d.hatena.ne.jp/atsuoishimoto/20100807/1281169026 を書いたあとに、スタティックメソッドの使い道を思いついた。やや人工的なシチュエーションではあるが…こんなコードを考えてみよう def _callexit(): sys.exit() class Foo(object): shutdown = _…

スタティックメソッドは要らない子?

Pythonでは、クラス内で定義することの出来るメソッドが三種類用意されている。メソッド・クラスメソッド・スタティックメソッドの3種類だ。それぞれどんな特徴を持っているのだろうか? メソッド まず、メソッドはおなじみのインスタンスメソッドで、第一引…

Python Hack-a-thon 2010.07 のスライド

String representation in py3kView more presentations from atsuoishimoto.

Pyrex 0.9.9の変更点

先日 Python拡張モジュール開発言語 Pyrex の 0.9.9がリリースされたが、このバージョンでは旧バージョンとは非互換となる変更が加えられており、注意が必要である。 例外処理の変更 Pyrex 0.9.9では、発生した例外が実行中のスレッドに保存されなくなり、sy…

pykfをPyPIに登録

Python用日本語エンコーディング変換モジュール pykf の setuptools 対応を行い、PyPI にアップロードした。これからは easy_install pykfで利用可能なので、機会があればご利用ください。

Python高速化テクニック

ここ2〜3日、InfoPileのパフォーマンスチューニングをしており、ちょっともたつきを感じるような部分をほとんど解消することができた。InfoPileで使用した高速化テクニックの中で効果が大きく、よくつかわれそうなものを紹介しよう。尚、以下のスクリプト…

Python用 オブジェクトシリアライザ 「しば漬け」

https://code.launchpad.net/~aishimoto/+junk/shibazukemethaneさんのmsgpack用ベンチマークを拝借すると、こんな感じ。 == Integer == = Size = pickle: 6203398 [bytes] json: 5154816 [bytes] shibazuke: 3001355 [bytes] pickle_dump 294.900[ms] pickl…

サーバ証明書を動的に生成するSSLサーバ

通常、SSLでの接続を受け付けるサーバアプリケーションではサーバ証明書を用意する必要があるが、ちょっとしたテストなどでいちいち証明書を管理するのが面倒な場合には、証明書を動的に作成して使用することもできる。以下は foolscap を参考に作成したサン…

Twisted 9.0.0リリース

Twisted 9.0.0がリリースされているが、あのプロジェクトはなんでいっつもアナウンス流さないんだろう?修正内容はこちら。 それほど目立った機能追加はなさそうだけど、個人的には syslog関係の機能追加 とSMTP関連のパッチがいくつか取り込まれたのが嬉し…

JCCを試してみる

JCC は、 Javaのライブラリを Python から呼び出すため拡張モジュールを生成してくれるツールで、全文検索ライブラリ Apache Lucene の Python インターフェースである PyLucene 用に開発された。しかし決して PyLucene 専用のツールではなく、Python から J…

Twisted で reactor のループをブロックせずにクライアントにファイルを転送するツールを書いてみた。

Twisted にはファイル転送のための FileSender があるが、reactor のループ中にファイルの読み込みを行うため、その間、他のリクエストを処理できずに応答性が低下してしまうケースがある。以下の NonblockingFileSender では ファイルの読み込みを別スレッ…

PyLuceneをWindowsでビルド

必要なもの PyLuceneこれがなければ始まらない。ソースアーカイブをダウンロードしておいてください。 Visual Studio 2008 Visual Studio 2008 Express Edtionでは試していません。 Apache AntPyLuceneのビルドに使用します。バイナリをダウンロードして、適…