タグ

ブックマーク / methane.hatenablog.jp (12)

  • Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ

    PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エスケープの問題考えるのが面倒だったり、 kill してみたらシェルだけ殺して肝心のコマンドがずっと残ってるというアホみたいな問題を避けられるのでお勧めです。 いい子はこれを使いましょう。 この記事ではどうしてもシェルの機能が使いたい場合や、 subprocess の PIPE の組み立てが面倒な場合のための、バッドノウハウを紹介していきます。 ちなみに、バッドノウハウと呼んでるのは、安全安心 one size fits all ではなく、メリット・デメリット・やり方をいちいち調べないといけなくて、しかもその調べる行為がほとんどコン

    Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ
  • ','.join() がなぜキモイのか - methaneのブログ

    Ruby厨とPython厨が平行線の議論をしていたので、まとめてみる。 オブジェクト指向的にキモイ? str.join() 処理での登場人物は2人いる。連結文字(区切り文字=separator)、連結される文字列の列だ。 この二つを比べると、「連結される文字列の列」が情報的に重要な場合がほとんどだろう。それを元に文字列の列が主役で連結文字はオマケと考えると、「joinが主役でない連結文字側のメソッドになる何てキモチワルイ」となる。 でも、別の視点で「連結する側とされる側」というように分類すると、「区切り文字 join 連結される文字」が素直な能動態で、「連結される文字列 (is) join(ed by) 連結される文字」だと無理やりな受動態になるので、''.join() の方が素直だ。 Rubyの場合は「配列が要素をjoinする」と配列が主体となっているので、後者の考え方はしにくい。なので

    ','.join() がなぜキモイのか - methaneのブログ
  • そんなに Array.join がいいのか - methaneのブログ

    「(ruby|javascript)でstr.join(array)、pythonでlist.join(str)」http://blog.livedoor.jp/dankogai/archives/51226075.html ここではlistを継承したListクラスをこさえて、そこにjoinメソッドを追加しているが、listに直にメソッド追加する方法はないのだろうか.... 多分できない。 PythonPerl,Rubyに比べて、上の方は同じくらい柔らかいんだけど、下の方は堅い。 Unicodeのことまで考慮に入れて実装したために、実装がずいぶんと泥臭いものになっている。 join したいものが一種類ではないというのが、 join が list のメソッドでない理由の一つだからね。 str()はUnicodeをうと例外をお吐きになる。それでいて"dankogai" + u"小飼弾"はu

    そんなに Array.join がいいのか - methaneのブログ
  • Python と mix-in - methaneのブログ

    http://d.hatena.ne.jp/w_o/20081205#p3 ←のエントリは、タイトルと文とTB先に情報が分散していて引用しにくいので、このエントリで書きたい話題をまとめると、 Rubyはmix-inができるので、クラスの継承が必要無いので(親クラスのコンストラクタ呼び出しの書き方が)あまり関係無い。 Pythonでmix-inをするには多重継承をしないといけないので、 super を使った方式で親クラスのコンストラクタを呼び出さないといけない。 まず、 mix-in をぶっちゃけると、「メソッドの固まりを取り込む」ことで良いよね?メソッドの固まりは、混ぜる先にある既存のメソッドに依存していいし、混ぜる先は混ぜるのに必要な前提条件を満たさなければならない。 class CmpMixin(object): """__lt__ と __eq__ を利用して、 __le__, _

    Python と mix-in - methaneのブログ
  • Py3k の super - methaneのブログ

    super() について - methaneの日記 について super() は、 super(Type, obj) とするとsuper型のオブジェクトを返し、そのオブジェクトには __getattr__() があって、 super(Type, obj).foo とすると、 mro の Type 以降で一番最初に foo を持っているクラスを探し、その foo を obj に bind して返す。 Python 3.0 からは、super() の引数が省略できるようになっている。これは、 super() の主な用途が、JavaRubyのsuperと同じく class の中で親クラスのメソッドを呼び出すものであり、毎回 super(ThisClass, self) を書くのは DRY 原則に反するからである。 *1 さて、僕が super() について - methaneの日記 で思いっき

    Py3k の super - methaneのブログ
  • IPython の起動が重くなったら - methaneのブログ

    history のためすぎを疑う。 %clear shadow_compress か %clear shadow_nuke かを試すと良い。詳しくは %clear?

    IPython の起動が重くなったら - methaneのブログ
    rawwell
    rawwell 2009/06/09
    "history のためすぎを疑う。 %clear shadow_compress か %clear shadow_nuke かを試すと良い。詳しくは %clear?"
  • pythonrc - methaneのブログ

    Windowsの設定 [環境変数] PYTHONSTARTUP=%HOME%\.pythonrc.py [.pythonrc.py] import os import sys import os.path import rlcompleter import readline readline.parse_and_bind("tab: complete")PYTHONSTARTUPを設定すると、インタラクティブシェルでデフォルトでモジュールを読み込んだりできる。よく使うモジュールはこれでimportしておく。 pyreadlineをインストールしておいて、インタラクティブシェルでTAB補完がきくようにしている。IPythonも使いやすいけど、若干起動時間がかかるので、ちょっと使いたいだけなら普通のインタラクティブシェルを使う。

    pythonrc - methaneのブログ
    rawwell
    rawwell 2009/06/02
    "[環境変数] PYTHONSTARTUP=%HOME%\.pythonrc.py [.pythonrc.py] import os import sys import os.path import rlcompleter import readline readline.parse_and_bind("tab: complete")"
  • PythonでGmailにIMAP経由でアップロードしてやんよ - methaneのブログ

    経緯 いまさらだが、ローカルにためてたメールをGmailにアップロードしてみた。最初はThunderbirdでIMAP4の設定をして、Thunderbirdで選択+移動でアップロードしていたのだが、(1)ときどきConnectionが切れる、(2)時々Gmailがエラーを返す、ために移動が止まってしまう。しかも、複数選択した状態で移動に失敗すると、アップロードに成功したメールも移動元に残ってしまい、どのメールをアップロードしたのかわからなくなってしまう。 なので、一回あたり数十通だけを選択してチマチマアップロードしていたのだが、一つ目のディレクトリをアップロードした時点残りのメールの量に絶望した。 下調べ とりあえず、imapとmboxを扱うライブラリが無いかとcheese shopを物色してみるも、殆ど無い。そういえば標準ライブラリにあった気がすると思い出して、標準ライブラリの法を調べて

    PythonでGmailにIMAP経由でアップロードしてやんよ - methaneのブログ
    rawwell
    rawwell 2009/06/02
    "そういえば標準ライブラリにあった気がすると思い出して、標準ライブラリの法を調べてみると、imaplib, mailbox といったモジュールがあった。さすがPython、バッテリ同梱を特徴に挙げるだけのことはある。"
  • Vimをタブエディタとして使う - methaneのブログ

    Vim7でタブに対応したからとほかのタブエディタからVimに乗り換えた人には必須のTips。 新しいファイルを開くとき、すでにVimが立ち上がっているのなら、新しいタブとして開きたい。 そんなときは、Vimのコマンドラインオプションに--remote-tab-silentをつける。 参考:http://vimdoc.sourceforge.net/htmldoc/remote.html ということで、regeditで gvim.exe "%1" みたいになってるところを片っ端から検索して、gvim.exe --remote-tab-silent "%1" に修正してやる。

    Vimをタブエディタとして使う - methaneのブログ
    rawwell
    rawwell 2009/06/02
    "Vim7でタブに対応したからとほかのタブエディタからVimに乗り換えた人には必須のTips。 新しいファイルを開くとき、すでにVimが立ち上がっているのなら、新しいタブとして開きたい。 そんなときは、Vimのコマンドラインオ
  • Pythonプログラムがメモリを大量に使っているとき - methaneのブログ

    もし想定以上のメモリを Python プログラムが消費しているのであれば、ループの中で循環参照が生まれていることや、回収不能オブジェクト(循環参照なうえに __del__ メソッドが存在するためにgcがどこから循環を切っていいのか判らないオブジェクト)が存在しないかを疑う。 import gc gc.set_debug(gc.DEBUG_LEAK) gc.disable() # 問題の処理 gc.collect() # 回収された循環参照や回収不能オブジェクトが表示される

    Pythonプログラムがメモリを大量に使っているとき - methaneのブログ
    rawwell
    rawwell 2009/06/02
    "もし想定以上のメモリを Python プログラムが消費しているのであれば、ループの中で循環参照が生まれていることや、回収不能オブジェクト(循環参照なうえに __del__ メソッドが存在するためにgcがどこから循環を切っていい
  • Python 2.6.2 リリース && 日本人に取っては割とキツいバグ混入 - methaneのブログ

    loggingモジュールがunicodeメッセージをエンコードして出力するか否かを判定する部分の 単純なミスで、unicodeメッセージが出力ストリームの .encoding にエンコードされない。 logging.error(u"ほげ")とかやると文字化けする。 http://bugs.python.org/issue5768 に登録してきた。

    Python 2.6.2 リリース && 日本人に取っては割とキツいバグ混入 - methaneのブログ
    rawwell
    rawwell 2009/05/11
    loggingモジュールがunicodeメッセージをエンコードして出力するか否かを判定する部分の 単純なミスで、unicodeメッセージが出力ストリームの .encoding にエンコードされない。 logging.error(u"ほげ") とかやると文字化けする
  • Python3.0 への移行準備 - methaneのブログ

    http://coreblog.org/ats/why-python-30-is-still-deprecated 最も大きな理由。それはCで書かれたエクステンションの3.0対応がけっこう大変だから。 ... データベース接続モジュール,テンプレートエンジンとか,お世話になっているCエクステンションは多い。直接使って無くても,フレームワークがそういうエクステンションを使っていることが多い。その他にも,PILのようなライブラリ,wxPythonのようなGUIフレームワークラッパは修正点が多くて大変だと思う。これらのエクステンションの多くが3.0に対応してくれないと,僕は完全に3.0には移行できない。それまで数年かかるだろう,ということだ。 まったく同感だったんだけど、最近はPython界が僕が思うより速く動いている事に驚いている。数年というのは3年以下かもしれない。 Pythonの「バージョ

    Python3.0 への移行準備 - methaneのブログ
    rawwell
    rawwell 2009/04/06
    boost.python C++の超有名ライブラリboostに含まれる、C++クラスのPython wrapper。 Google Summer of Code 2009 でPython3対応プロジェクトあり。
  • 1