создать объект подпроцесса из уже запущенного процесса - PullRequest
2 голосов
/ 17 февраля 2011

Я хотел бы создать subprocess.Popen объект из уже запущенного процесса ... Возможно ли это как-нибудь?

Другая идея состояла бы в том, чтобы сериализовать (выбрать) объект подпроцесса и записать его в базу данныхтак что если основной процесс перезапустится, он сможет получить объекты subprocess.Popen из базы данных.Я не уверен, что это работает.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Предполагая, что вы хотите общаться с «подпроцессом» и должны делать это, используя его стандартные потоки ввода / вывода, вы можете создать оболочку вокруг исполняемого файла, которая отображает его stdin / out / err на сокет или именованный канал.

Программа, которая намеревается управлять «подпроцессом», может в любое время запускать и останавливать связь. Возможно, вам придется предусмотреть и механизм блокировки.

Затем, если вы работаете в Linux, вы можете получить доступ к stdin / out / err запущенного процесса через /proc/<pid>/fd/<0,1,2>. Вы не будете подключать их к объекту subprocess.Popen, но open('/proc/<pid>/fd/1', 'rb') будет вести себя как Popen().stdout.

2 голосов
/ 17 февраля 2011
создать подпроцесс. Открыть объект из уже запущенного процесса

Вы имеете в виду из уже запущенного подпроцесса?Единственный известный мне способ передачи объектов между процессами - это выбрать их и записать в файл или базу данных, как вы предлагали.

Как правило, подпроцессы не могут быть созданы из уже запущенных подпроцессов, но вы можете сохранить ссылку на новый процесс, который хотите создать, и порождать его из основного процесса.Это может стать очень уродливым, и я настоятельно рекомендую против этого.Почему, в частности, вам нужно продвинуть свое дерево процессов после двух глубоких?Эта информация может привести к лучшему ответу.

...