подпроцесс python с shell = True: перенаправления и убийство подпроцессов, не зависящее от платформы

Я ' Мне трудно получить то, что я хочу, из модуля подпроцесса python (который предполагал унифицированную / платформенно-независимую абстракцию, afaik, но не заставляйте меня начинать с этого :)).

Итак, простая вещь, что Я после этого. Я хочу

  • Запустить внешнее (stdio) приложение (возможно, с подпроцессом), где я использую перенаправления в стиле оболочки (например, './myapp> stdout_log> stderr_log') t найти функциональные возможности для выполнения этого без ожидания (а родительский процесс python должен выполнять другие действия, пока выполняется дочерний процесс)
  • Если я использую shell = True , тогда subprocess.kill () завершит только оболочку, но не дочерний процесс
  • Мне понадобится надежный метод завершения дочернего процесса, который работает на любой платформе (но, по крайней мере, в Linux и Windows)

Надеюсь, я был достаточно конкретен . Заранее спасибо за любые советы / подсказки - я просто провел целый день с подпроцессом, и ИМХО это боль далеко не независимая от платформы или простая :( (но, возможно, это только я)

ОБНОВЛЕНИЕ (13.10.2010):

Если вы запустите подпроцесс (даже с shell = False), тогда функция subprocess.Popen.kill () убьет только этот подпроцесс (так что если есть какие-то «внуковые» процессы, они не будут завершены.)

Я читал об использовании параметра preexec_fn для установки sid для всех дочерних процессов, но это только для unix: тайм-аут подпроцесса

6
задан Community 23 May 2017 в 12:23
поделиться