外部コマンドを起動する

「外部コマンドを起動する」の編集履歴(バックアップ)一覧はこちら

外部コマンドを起動する」(2009/07/08 (水) 13:53:27) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

自分の状況では、この例がもっともフィットしました。 [[試験運用中なLinux備忘録>http://d.hatena.ne.jp/kakurasan/20080413/p1]] [[O'REILLY>http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html]] [[subprocessにおけるエラー報告ダイアログ抑止の参考>http://blogs.activestate.com/ericp/2007/11/supressing-the.html]] ---- py2exe内で外部プロセスを使うプログラムA.exeを作成、 プログラムBからプログラムAを外部プロセスとして呼ぶ場合、 一定量まで標準出力を呼んでからまとめて出す、ようなおかしな状況に。 readlineのバッファ量の設定と思ったのだが [[Python Matrix Jp>http://python.matrix.jp/tips/compatibility/subprocess.html]] プログラムA内でsys.stdout.flush()やsys.stdout.close()をよぶ、といった解決法がありそう。 [[subprocess -popen - reading stdout from child - hangs>http://bytes.com/forum/thread712353.html]] [[西尾泰和のはてなダイアリー(Pythonで子プロセスの出力を読む)>http://d.hatena.ne.jp/nishiohirokazu/20080407/1207536676]] [[西尾泰和のはてなダイアリー(子プロセスに標準入力と標準出力を中継)>http://d.hatena.ne.jp/nishiohirokazu/20080404/1207312557]] *子プロセス以下をすべてkillしたい subprocess.Popenに preexec_fn= os.setsid とオプション指定すると、サブプロセスがプロセスグループ(Process Group)のトップになるため os.killpg(pgid, signal.SIGTERM) したときに、親プロセスを巻き込まずにkillすることができます。 プロセス情報を操作するのはosモジュールの方にあります。 [[プロセスのパラメタ>http://www.python.jp/doc/release/lib/os-procinfo.html]] Pythonではありませんが、Unixのプロセスについて分かりやすく説明されてます。 [[プロセス制御>http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC26]] *spaceのあるパスでうまくいかない #code(){{ 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です。
自分の状況では、この例がもっともフィットしました。 [[試験運用中なLinux備忘録>http://d.hatena.ne.jp/kakurasan/20080413/p1]] [[O'REILLY>http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html]] [[subprocessにおけるエラー報告ダイアログ抑止の参考>http://blogs.activestate.com/ericp/2007/11/supressing-the.html]] ---- py2exe内で外部プロセスを使うプログラムA.exeを作成、 プログラムBからプログラムAを外部プロセスとして呼ぶ場合、 一定量まで標準出力を呼んでからまとめて出す、ようなおかしな状況に。 readlineのバッファ量の設定と思ったのだが [[Python Matrix Jp>http://python.matrix.jp/tips/compatibility/subprocess.html]] プログラムA内でsys.stdout.flush()やsys.stdout.close()をよぶ、といった解決法がありそう。 [[subprocess -popen - reading stdout from child - hangs>http://bytes.com/forum/thread712353.html]] [[西尾泰和のはてなダイアリー(Pythonで子プロセスの出力を読む)>http://d.hatena.ne.jp/nishiohirokazu/20080407/1207536676]] [[西尾泰和のはてなダイアリー(子プロセスに標準入力と標準出力を中継)>http://d.hatena.ne.jp/nishiohirokazu/20080404/1207312557]] *子プロセス以下をすべてkillしたい subprocess.Popenに preexec_fn= os.setsid とオプション指定すると、サブプロセスがプロセスグループ(Process Group)のトップになるため os.killpg(pgid, signal.SIGTERM) したときに、親プロセスを巻き込まずにkillすることができます。 プロセス情報を操作するのはosモジュールの方にあります。 [[プロセスのパラメタ>http://www.python.jp/doc/release/lib/os-procinfo.html]] Pythonではありませんが、Unixのプロセスについて分かりやすく説明されてます。 [[プロセス制御>http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC26]] *spaceのあるパスでうまくいかない #highlight(python){{ 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です。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。