はじめに nose のプラグインの作成方法です。 役割 テスト関数から外れた処理をする場合は、プラグインを作成する必要があります。 たとえば、次のような場合にプラグインを作成します。 各テスト実行後に特定処理を実行させたいが、テスト関数ごとに teardown を書くのがめんどくさい。 レポートの出力形式を独自のものにしたい。 書き方 nose.plugins.Plugin を継承したクラスを作成します。 必要なことは、 name を指定すること、プラグインを動作させたいエントリポイントをオーバーライドすることです。 name は、実行時にプラグインを指定するときに使用します。 エントリポイントは、プラグインの動作を定義します。 from nose.plugins import Plugin class AfterLog(Plugin): """テスト実行ごとに、ログを出力させます。 ""
Python初学者が引っかかる落とし穴に、 seq = [[]] * 5 seq[0].append('A') print(seq) としたとき、どのような出力が出るか?というのがある。 一見、 [['A'], [], [], [], []] となりそうだが、実際には [['A'], ['A'], ['A'], ['A'], ['A']] となる。 seq = [[]] * 5 という文はちょっとごちゃごちゃして分かりにくいのでちょっと書き直してみると item = [] seq = [item] * 5 と同じだ。まず空のリストを一つ作成し、そのリストを要素とする長さ1のリストを作る。そして長さ1のリストを *5 して長さ5のリストを作成し、 seq に 代入する。Pythonスクリプトとして書き直すと: def list_mul(seq, n): ret = [] for i in r
Sphinx使っているのだけどファイルを更新するたびにmake htmlと打って確認するのがめんどくさい。linuxだったらpyinotifyがあるんだけど、macbookでは使えない。 簡易コマンド書いた。 #!/usr/bin/env python import os from time import sleep, strftime, localtime import sys import commands filename = sys.argv[1] mycommand = sys.argv[2] def get_mtime(): return os.stat(filename).st_mtime mtime = get_mtime() while 1: sleep(1) new_mtime = get_mtime() if mtime != new_mtime: mtime = n
以上でPythonで学ぶ「詳解 UNIXプログラミング」シリーズを終える。軽いネタのつもりで書き始めたが、サンプル一つ一つにきちんと目を通すのはなかなか楽しく、思ったよりも時間がかかってしまった。短期間にこんなにたくさんのos.fork()を書いたのは初めてだ。 このシリーズを通じて、Pythonのシステム管理ツールとしての優秀さを再確認することができた。ほとんどのサンプルはPythonの標準モジュールだけで実装することができたし、C言語版に比べて非常にシンプルになった。また、対話環境で手軽に実行し、その場で結果を確認できるので、より幅広い実験を行うことができる。Pythonだけでなく、他のスクリプト言語でも同様だろう。id:syohex さんが Perlで学ぶ「詳解 UNIXプログラミング」(その0) - syohex’s diary を書かれているので、Perlプログラマは参照されたい
みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー microneを作ってみたのだけど,もうちょっと実践的なアプリを作った方がいいかな〜,と思ったので,画像掲示板を作ってみた。microneimageboardといいます。Twitterアカウントで認証をし,画像を投稿できます。 使い方 ここからブートストラップを取ってくる。 buildout.cgfの50行目あたり,「aha」「aha.plugin.microne」「aha.plugin.twitteroauth」を消して,「aha.application.microneimageboard」に置き換える。また,app/application.pyというファイルを消す。 「python
Pythonでデコレータで修飾した関数から、修飾される前の関数を取り出したいというニーズは多いようで デコレータ式を適用した関数から元の関数名を探す - gumi Engineer’s Blog デコレータを外す - logiqboard デコレータを取り除いて見たかった。 - podhmoの日記 のようなブログエントリが上がっているが、Pythonでは元の関数を取り出す確実な手法は用意されていないので諦めていただきたい。デコレータを使って関数を定義しても、Pythonはその情報をどこにも記録していない。 必要であれば http://docs.pylonsproject.org/projects/venusian/dev/ のようにデコレータ自身に細工をする、テスト対象モジュールのインポート時にフックを入れ、修飾せずに元の関数を返すデコレータに置き換えるなどとするしかないだろう。 自由変数
jishoはターミナルでアルクの英和/和英検索をするソフトウェア。Emacs Lispもある。 jishoはPython/Lisp製、コンソールまたはEmacs向けのフリーウェア(ソースコードは公開されている)。ソフトウェアの情報を集める上で、英語圏のチェックは欠かせない。むしろ情報源の殆どは英語圏をはじめとする海外にある。全ての文章がささっと分かれば良いが、筆者の能力ではまだまだそのレベルには及ばない。 英和 そのため、分からない単語があったりニュアンスの難しい単語があれば辞書サイトを調べると言った行為が必要になる。Webブラウザの検索欄に入れて、辞書サイトにいくといったステップだが繰り返すと少なくない工数だ。そこで使ってみたいのがjishoだ。 jishoはターミナルで使える辞書ソフトウェアだ。実際の辞書データはアルクのものを使っている。jishoコマンドの後ろに調べたい英単語を入れれ
はじめに nose には、簡単にテストするための機能が用意されています。 機能は、 nose.tools パッケージにまとまっています。 いくつかの機能は、前回までに出ていますが、あらためて書いてあります。 使い方 nose.tools.ok_ ok_(expr, msg=None) expr が True かどうかを評価します。 msg がある場合は、テスト結果に出力します。 nose.tools.eq_ eq_(a, b, msg=None) a と b が等しいかどうかを評価します。 msg がある場合は、テスト結果に出力します。 nose.tools.raises @raises(TypeError) def raise_test(): raise TypeError("This test passes") @raises(TypeError, ValueError) def ra
はじめに nose の基本的な使い方その2です。 setup/teardown の動作についてです。 役割 テストを行う上で、あらかじめデータを用意しておく必要あったり、 テスト後に作成したデータを削除するときに利用します。 詳しくは、他のブログなどをみましょう。 書き方 nose では、パッケージレベル、モジュールレベル、関数レベルで定義することができます。 パッケージレベルでは、 __init__.py に setup/teardown を定義します。 モジュールレベルでは、テスト用モジュールに setup/teardown を定義します。 関数レベルでは、 nose.tools.with_setup に関数ごとに呼び出したい、setup/teardown をデコレータに渡します。 呼び出し順 テストパッケージ内に上の3つのレベルで、 setup/teardown が定義されていると呼
GAE/Pythonで最初に戸惑うのはRequestHandlerだと思います。新規アプリケーション作成時に自動生成されるので必要に応じて書き換えることができれば問題ありません。 RequestHandlerとは GAEにおいて xxx というIDでアプリケーションを公開すると http://xxx.appspot.com/ というURLが割り当てられます。ウェブアプリケーションには、トップページ、記事のリスト、記事の詳細など複数のページがありますが、それぞれのページにどういうURLを割り当てますか?こんな感じに割り当てる場合が多いと思います。RequestHandlerの役割はURLと処理を結びつけることです。 トップページ http://xxx.appspot.com/ 記事一覧ページ http://xxx.appspot.com/list 個別記事ページ http://xxx.app
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 received, pid={0}".format(os.getpid()) pr_ids("parent") pid = os.fork() if pid: # parent time.sleep(5) print "parent finish" sys.exit(0) else: # child pr_ids("child") signal.signal(sign
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 "before fork" pid = os.fork() if pid == 0: # child glob += 1 # modify variables var += 1 else: # parent time.sleep(2) print "pid={0}, glob={1}, var={2}".format(os.getp
はじめに nose の基本的な使い方です。 条件式がTrueかどうか、2値が等しいかどうかをチェックする方法です。 テストの作成 まずテスト用モジュールを作成します。 モジュール名には、 "test" を含んでいる必要があります。 そのためテストしたいモジュール名+"_test"などとするとわかりやすくなると思います。 つぎに、同じルールでテスト用関数を作成します。 関数名にも、 "test" を含んでいる必要があります。 1つの機能ごとに名前を付けていくと良いです。 ソースコード # coding: utf-8 """ テスト対象のモジュール """ def add(x, y): return x + y def sub(x, y): return x - y # coding: utf-8 """ テスト用モジュール """ from nose.tools import ok_, eq
概要 最近、あるお客さんから、 快速なので、 cjson を使おうという要望をいただきましたが、 以前、僕は cjson は色なエッジケースの処理が微妙と分かっていて、実際に他のライブラリより早いのかなと思いました。 cjsonのPyPiページ いろなコメントが書かれています。しかも、 最新パージョンは 2007 リリースでかなり古い。バグがあるのに、直っていないし、あんまりメンテしてないライブラリに見える。 simplejson も jsonlib もCで拡張があり、 かなり最適化されていると思ったので、テストしてみようと思いました。 というわけで、パフォーマンステストを作って、bitbucket にアップしました https://bitbucket.org/IanLewis/jsonlib-test 準備 buildout を使って、環境を作ります テストを実行 ./bin/run_t
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く