前提条件 -今後os.popen2はsubprocessに置き換えられていくようなので、なるべくsubprocessを使う。 -linux,OSX,windows全部で使える手段が望ましい。 やりたいこと。 レンダラの起動です、当然ながら。 + 別プロセスで起動。以下の理由のため、終了を待たない。 + 標準出力結果を毎行リアルタイムにきちんとチェックする。エラーによっては強制終了。問題なければログに出す。 + 標準出力、標準エラー両方まとめてしまう。 + windowsのエラー報告ダイアログは抑止。さもないとVNCでイチイチつないで閉じるまで操作不能になってしまうし。 #code(){{ outptr = file(logFile, "a") try: #エラー報告ダイアログ抑止用 if sys.platform.startswith("win"): import ctypes SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN ctypes.windll.kernel32.SetErrorMode(SEM_NOGPFAULTERRORBOX); subprocess_flags = CREATE_NO_WINDOW else: subprocess_flags = 0 currentSubprocess = subprocess.Popen(command,shell=False, stdout=subprocess.PIPE, sstderr=subprocess.STDOUT, creationflags=subprocess_flags) print 'started process pid ['+str(currentSubprocess.pid)+']' child_stdout= currentSubprocess.stdout for line in child_stdout: #errorチェックはここでする。 outptr.write(line) except Exception,e: print 'Error! currentSubprocess['+str(currentSubprocess.pid)+']'# it will be 1 print repr('Error...') return 0 }} 思った通りには動いてる。 注意点として、batの場合、中で他の外部コマンドを起動するときはcallで読んでもらわないと外部エラー出力が流れてこない。 [[参考>http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html]] [[subprocessにおけるエラー報告ダイアログ抑止の参考>http://blogs.activestate.com/ericp/2007/11/supressing-the.html]]