py2exe内で外部プロセスを使うプログラムA.exeを作成、
プログラムBからプログラムAを外部プロセスとして呼ぶ場合、
一定量まで標準出力を呼んでからまとめて出す、ようなおかしな状況に。
子プロセス以下をすべてkillしたい
subprocess.Popenに
preexec_fn= os.setsid
とオプション指定すると、サブプロセスがプロセスグループ(Process Group)のトップになるため
os.killpg(pgid, signal.SIGTERM)
したときに、親プロセスを巻き込まずにkillすることができます。
Pythonではありませんが、Unixのプロセスについて分かりやすく説明されてます。
プロセス制御
spaceのあるパスでうまくいかない
path = 'C:/Documents and Settings/user'
cmd = ['C:/Program Files/TortoiseSVN/bin/SubWCRev.exe', path]
p = subprocess.Popen(
cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
)
このpathの方にスペースがあると、コマンド自体、C:/Programまでと判断されてしまう?
解決法は、shell=Falseです。
最終更新:2009年07月08日 13:53