[Python][Windows][subprocess] subprocess モジュールの隠し関数?
os.spawnv() が思ったように動いてくれないのでドキュメントやら CRT のソースやらを追っていたら、Windows 版の Python ではビルトインの _subprocess モジュールに次のドキュメント化されていない関数と定数が定義されていることに気づいた (Python 2.5.1 で確認)。これらはユーザランド実装である subprocess.Popen クラスで使われている。
で、これの何がうれしいかというと TerminateProcess() を使うのに Python for Windows Extensions (win32api) をわざわざ入れなくてもよいところ。
- 関数
- GetStdHandle(hdl_type) -> hConsole
- GetCurrentProcess() -> hProcess
- DuplicateHandle(hSrcProc, hSrc, hTargetProc, dwDesiredAcc, bInherit, dwOpts) -> handle
- CreatePipe(dwPipeAttrs, dwBufSize) -> (hReadPipe, hWritePipe)
- CreateProcess(szAppName, szCmdLine, dwProcAttrs, dwThrAttrs, bInherit, dwFlags, dictEnv, szCurDir, dictStartupInfo) -> (hProc, hThread, dwProcId, dwThrId)
- TerminateProcess(hProc, dwExitCode)
- GetExitCodeProcess(hProc) -> exit code
- WaitForSingleObject(hdl, dwTime) -> status
- GetVersion() -> version
- GetModuleFileName(hMod) -> module file name
- 定数
- STD_INPUT_HANDLE
- STD_OUTPUT_HANDLE
- STD_ERROR_HANDLE
- DUPLICATE_SAME_ACCESS
- STARTF_USESTDHANDLES
- STARTF_USESHOWWINDOW
- SW_HIDE
- INFINITE
- WAIT_OBJECT_0
- CREATE_NEW_CONSOLE
CreateProcess の dictStartupInfo には以下のキーを持つディクショナリを指定する。
dwFlags | STARTUP_INFO のフラグ |
wShowWindow | WIN32 API 関数の ShowWindow() に渡すフラグ。STARTF_USESHOWWINDOW を指定したときのみ有効 |
hStdInput | 標準入力を表すハンドル。dwFlags に STARTF_USESTDHANDLES を指定したときのみ有効 |
hStdOutput | 標準入力を表すハンドル。dwFlags に STARTF_USESTDHANDLES を指定したときのみ有効 |
hStdError | 標準入力を表すハンドル。dwFlags に STARTF_USESTDHANDLES を指定したときのみ有効 |