このBlogは移転しました。今後は aish.dev を御覧ください。

2011-01-01から1年間の記事一覧

Pythonバージョンの選びかた

Pythonはおよそ18ヶ月ごとに新しいメジャーバージョンをリリースする慣習になっていて、これまでにたくさんのバージョンがリリースされ、広く利用されてきた。Pythonの開発では後方互換性を保つことが非常に重視されていて、通常のアプリケーションであれば…

Pythonで学ぶ「詳解 UNIXプログラミング」(その17) おしまい

以上でPythonで学ぶ「詳解 UNIXプログラミング」シリーズを終える。軽いネタのつもりで書き始めたが、サンプル一つ一つにきちんと目を通すのはなかなか楽しく、思ったよりも時間がかかってしまった。短期間にこんなにたくさんのos.fork()を書いたのは初めて…

Pythonで学ぶ「詳解 UNIXプログラミング」(その16) 第19章 擬似端末

19.1 〜 19.3 Pythonのpty.fork()でptyのオープンとforkを行うことができる。pty.fork()はこのサンプルと同等の機能が実装されており、Linux/BSD/Solaris/Cygwin等の各プラットフォーム対応のコードが入っている。ただし、子プロセス側でのtermioとウィンド…

デコレータの元関数を保存する

テスト等でデコレータのデコレート前の関数を保存する必要があるなら、こんなのはどうだろう? import sys def tee(f): sys._getframe(1).f_locals['_raw_'+f.func_name] = f return f デコレートした関数オブジェクトから元の関数を取り出すのは難しいし、…

func_closureのひみつ

Pythonでデコレータで修飾した関数から、修飾される前の関数を取り出したいというニーズは多いようでデコレータ式を適用した関数から元の関数名を探す - gumi Engineer’s Blog デコレータを外す - logiqboard デコレータを取り除いて見たかった。 - podhmoの…

Pythonで学ぶ「詳解 UNIXプログラミング」(その15) 第15章〜第18章

以下の章 第15章 高度なプロセス間通信 第16章データベースライブラリ 第17章 PostScriptプリンタとの通信 第19章 モデムの発信 のサンプルは省略する。第15章ではプロセス間でファイルディスクリプタを受け渡す技法を解説しているが、この技法はPythonでは…

Pythonで学ぶ「詳解 UNIXプログラミング」(その14) 第14章 プロセス間通信

14.1 パイプを介して親から子へデータを転送する import sys, os r, w = os.pipe() pid = os.fork() if pid: # parent os.close(r) os.write(w, "hello world\n") else: # child os.close(w) line = os.read(r, 80) print line 14.2 ページ表示プログラムへ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その13) 第13章 デーモンプロセス

13.1 デーモンプロセスの初期化 import sys, os pid = os.fork() if pid: sys.exit(0) # parent goes bye-bye # child continues os.setsid() # become session leader os.chdir("/") # change working directory os.umask(0) # clear out file mode creatio…

Pythonで学ぶ「詳解 UNIXプログラミング」(その12) 第12章 高度な入出力

12.1 ブロックしない大量のwrite import os, sys, fcntl buf = sys.stdin.read() print >>sys.stderr, "read {0} bytes".format(len(buf)) wrote = 0 fno = sys.stdout.fileno() val = fcntl.fcntl(fno, fcntl.F_GETFL, 0) fcntl.fcntl(fno, fcntl.F_SETFL, …

Pythonで学ぶ「詳解 UNIXプログラミング」(その11) 第11章 端末入出力

11.1 割り込み文字を無効にし、ファイルの終わりの文字を変更する import os, sys, termios if not os.isatty(0): sys.exit("standard input is not a terminal device") vdisable = os.fpathconf(sys.stdin.fileno(), "PC_VDISABLE") if vdisable < 0: sys.…

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以降では…

VMWareのDebian系Linuxゲストで、サスペンド/リジュームするとネットワーク接続が切れる件

何回も同じ事を調べているのでメモ。http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1923 より/etc/network/interfacesに、auto eth0 を追加。 auto lo + auto eth0 iface lo inet loopback

「詳解UNIXプログラミング」のひみつ

詳解UNIXプログラミングの小口を見ると、各章が区別できるように印が印刷されている。こんな感じだ。この印は5列からなっており、一列目は第一章から第七章、二列目は第八章から第一二章、三列目は第一三章から第一九章、四列目は付録、五列目は索引となっ…

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プログラミング」"シリーズのエントリでは、私自身の復…

James Gosling Interview about Java

2011年1月1日に、IEEEの "Computer"マガジンは James Gosling にインタビューを行った。インタビュアーは、Gosling が作った言語(訳注:もちろんJavaのこと)を用いてのオブジェクト指向デザインに関して、この21年間を回顧するインタビューが取れるものと思…

【お詫びして訂正】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で使用している…