Pythonでソケットのバッファサイズを変更する
バッファサイズを変更する。
コードは以下の通り:
# -*- coding: utf-8 -*- import socket def modify_buf_size(send_buf_size=1024, recv_buf_size=1024): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) bufsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF) # 送信バッファサイズの取得 print 'SEND Buffer size [Before]:%d' % bufsize bufsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) # 受信バッファサイズの取得 print 'RECV Buffer size [Before]:%d' % bufsize # バッファサイズの変更 sock.setsockopt( socket.SOL_SOCKET, socket.SO_SNDBUF, send_buf_size) sock.setsockopt( socket.SOL_SOCKET, socket.SO_RCVBUF, recv_buf_size) bufsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF) print 'SEND Buffer size [After]:%d' % bufsize bufsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) print 'RECV Buffer size [After]:%d' % bufsize if __name__ == '__main__': modify_buf_size(send_buf_size=4096, recv_buf_size=4096)
実行結果は以下の通り:
bash-3.2$ python bufsize.py SEND Buffer size [Before]:131072 RECV Buffer size [Before]:131072 SEND Buffer size [After]:4096 RECV Buffer size [After]:4096
Beforeの欄の値は環境によって変わるはず。
Macでコマンドを使ってパスワード付きzip圧縮ファイルを作成する
Unix系のOSならたぶんできる方法。
手順は以下の通り:
- ターミナルを開く
- ファイルの場合、「zip -e 圧縮後のファイル名 圧縮したいファイル名」と打ち込む。
ディレクトリの場合「zip -e -r 圧縮後のファイル名 圧縮したいディレクトリ名」と打ち込む。
- 設定するパスワードを聞かれるので、同じパスワードを2回入力する
Pythonでパスワード付きのzipファイルを解凍する
Pythonでzipファイルを解凍する - 珠玉の誤訳で、Pythonでの単純なzipファイルの解凍方法を書いた。
今回はパスワード付きのzipファイルの解凍方法について書く。
とはいっても、基本的には同じ。コードは以下の通り。
import zipfile def unzip_with_pwd(filename, path='.', pwd=''): with zipfile.ZipFile(filename, 'r') as zip_file: try: zip_file.extractall(path=path, pwd=pwd) print 'extraction is successful!' except: print '%s is wrong password!' % pwd if __name__ == "__main__": unzip_with_pwd(filename="test.zip", pwd="nya")
謝ったパスワードに対しては、例外処理で対応している。
Pythonでzipファイルを解凍する
Pythonでのzipファイルの解凍は、zipfileを使うだけで簡単にできる。
import zipfile def unzip(filename, path='.'): with zipfile.ZipFile(filename, 'r') as zip_file: zip_file.extractall(path=path) if __name__ == "__main__": unzip("test.zip")
単純にやっているだけ。
事前に中身のチェックを入れるた方がいいかもしれない。
django.contribってなんなの?
Djangoをいじっていると、importするときによく出てくるdjango.contrib。
気になったので、調べてみた。
Djangoの標準ライブラリ
Chapter 16: django.contribを見ると、どうやらdjango.contribはDjangoの標準ライブラリのようだ。
機能別にサブパッケージにまとめられている。
以下のパッケージから構成されているようだ:
- admin
- admindocs
- auth
- comments
- contenttypes
- csrf
- databrowse
- flatpages
- formtools
- gis
- humanize
- localflavor
- markup
- redirects
- sessions
- sitemaps
- sites
- syndication
- webdesign
各パッケージの日本語での簡単な説明は、
http://www.djangoproject.jp/doc/ja/1.0/ref/contrib/index.html
にあった。
gisとadmindocsの説明だけ日本語ではなかったので英語を訳す。
admindocsは、DjangoのAdminサイトのためのドキュメント自動生成のパッケージ。
gisは、Geographic Information Systemsの略。地理情報システムをサポートするためのパッケージ.
PythonのWebアプリケーションフレームワークについてまとめる
PythonのWebアプリケーションフレームワークについて簡単に紹介してみる。
WebFrameworks - Python Wikiを参考にした。
Bottle(ボトル)
http://bottlepy.org/
Bottleは高速でシンプルなフレームワーク。
URLパラメータによるリクエストディスパッチ、テンプレート、key/valueデータベース、組み込みのHTTPサーバ、サードパーティのWSGI/HTTPサーバとテンプレートエンジンへのアダプタを提供している。
すべてが「bottle.py」という一つのファイルの中にあり、依存性がない。
CherryPy(チェリーパイ)
http://www.cherrypy.org/
CherryPyはPythonicでオブジェクト指向なHTTPフレームワーク。
Django(ジャンゴ)
http://www.djangoproject.jp/
人気のあるフルスタックのWebフレームワーク。
Webアプリを高速かつ、少ないコードで開発することができるようだ。
Flask(フラスク)
http://flask.pocoo.org/
Werkzeug(WSGIユーティリティライブラリ)、Jinja2(テンプレートエンジン)を基にしたマイクロフレームワーク。
Pylons(パイロンズ)
http://www.pylonsproject.org/
柔軟性と迅速な開発に重きを置いた、軽量なWebフレームワーク。
Pyramid(ピラミッド)
http://docs.pylonsproject.org/projects/pyramid/en/latest/
小さく、高速で、堅実なオープンソースのWebフレームワーク。
Tornado(トルネード)
http://www.tornadoweb.org/en/stable/
オープンソースのスケーラブルでノンブロッキングなWebサーバ。
TurboGears(ターボギアーズ)
【wxPython】フレームの作成
フレームは代表的なウィンドウオブジェクトです。
以下のコードでは「Test Frame」と言う名前の最小限の空のアプリケーションウィンドウが表示されます。
#!/usr/bin/env python # -*- coding: utf-8 -*- import wx class MyApp(wx.App): def OnInit(self): self.frame = MyFrame(None, title="Test Frame") self.SetTopWindow(self.frame) self.frame.Show() return True class MyFrame(wx.Frame): def __init__(self, parent, id=wx.ID_ANY, title="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE, name="MyFrame"): super(MyFrame, self).__init__(parent, id, title, pos, size, style, name) self.panel = wx.Panel(self) if __name__ == "__main__": app = MyApp(False) app.MainLoop()
同じことは以下のコードでもできます。
#!/usr/bin/env python # -*- coding: utf-8 -*- import wx app = wx.App() frame = wx.Frame(None, -1, "Test Frame") frame.Show() app.MainLoop()
実行すると、以下のように表示されます。
どのように動くか
フレームは最も重要なコンテナウィジェットで、他のウィジェットを含むことができます。
上記のクラスで大事なことは、フレームの子供としてパネルオブジェクトを作成したことです。
パネルは他のウィジェットを含むことができます。
まず、OnInitメソッドの中でフレームのインスタンスを作ります。そのとき最初のパラメータとして「None」を渡しています。これはフレームの親ウィンドウを指定するために使われます。「None」は親を持たないことを示しています。また、2番目のパラメータとして「Test Frame」を渡しています。これはウィンドウのタイトルを指定しています。
次に、SetTopWindowメソッドを呼んでいます。これは新しく作ったMyFrameインスタンスをアプリケーションのトップウィンドウとしてセットするために呼んでいます。
最後にフレームに対して、Showメソッドを呼んでいます。これによりフレームを表示します。