Я хотел использовать эквивалент python для соединения некоторых команд оболочки в perl. Что-то вроде открытой версии python (PIPE, «команда |»).Python's Popen cleanup
Я иду к модулю подпроцесса и попробовать это:
p = subprocess.Popen("zgrep thingiwant largefile", shell=True, stdout=subprocess.PIPE)
Это работает для чтения выходного так же, как я бы в Perl, но она не очиститься. Когда я выйти из интерпретатора, я получаю
grep: writing output: Broken pipe
изрыгают всего несколько стандартный вывод миллионов раз. Наверное, я наивно надеялся, что все это позаботится обо мне, но это неправда. Вызов прекращения или убийства на p, похоже, не помогает. Посмотрите на таблицу процессов, я вижу, что это убивает процесс/bin/sh, но оставляет ребенка gzip на месте, чтобы жаловаться на сломанную трубу.
Каков правильный способ сделать это?
Вы покидаете интерпретатор до того, как закончите свой подпроцесс 'p'? – physicsmichael