サブプロセス実行時のディレクトリの移動とログファイルの書き出し(修正版)

昨日の使用例のコードをWindowsで実行すると、なぜかフリーズする傾向にある。原因はよく分からないのだが、コードを少し修正した。下の修正版のようにするだけで動作がかなり異なる。
本質的には何も変わっていないと思うのだが...。

(使用例 修正版

import os
import popen2
import time

os.chdir(path)
cmd_name = 'a.out'
output = '%s.log' % cmd_name     # ログファイル名
filepath0 = os.path.join(path, 'logf', output)  # ログファイルのパス
fd = open(filepath0, 'w')

r, w, e = popen2.popen3(cmd_name)   # コマンドの実行
while True:
    s = r.readline()         # 実行による出力の読み込み
    print s,             # 読んだ分を出力する
    if s == '':
        break
    if fd:
        fd.write(s)      # ログファイルに書き込み
s = e.read()
if s:
    if fd:
        fd.write(s)

if r.close() or w.close() or e.close():
    print 'err> failed %s [%s]' \
                   % (cmd_name, time.ctime(time.time()))
else:
    print 'inf> done %s [%s]' % (cmd_name, time.ctime(time.time()))