2012-01-20 2 views
12

Я использую пару программ python, один из которых должен вызывать второй.Вызов подпроцесса python как демона и выход

Но это должно быть сделано так, что первая программа делает второй демоном (или работает в фоновом режиме), а затем выходит, не дожидаясь окончания второй программы.

Возможно ли это в Python?

Я смотрел на os.fork, модуль подпроцесса, но я совершенно запутался, как правильный способ достичь этого ...

ответ

10

Вы можете использовать subprocess.Popen для этого:

import subprocess 

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] 
subprocess.Popen(cmd) 

Возможно, вы захотите переадресовать stdout и stderr где-нибудь, вы можете это сделать, отправив stdout=<file_obj> в конструктор .

+1

Итак, в соответствии с этим, «daemon_process» должен быть равен чем-то вроде «/ usr/bin/pyton /path/to/my/second/pythonscript.py»? –

+0

@JavierNovoaC. «Popen» принимает список аргументов. Я отредактирую свой ответ, чтобы уточнить. –

+0

спасибо! что сработало;) –

3

«Демон» содержит более конкретное определение, чем просто «фоновый процесс». По умолчанию Popen выполнит подпроцесс и вернет управление вашей программе для продолжения работы. Тем не менее, это ничего не говорит о работе с сигналами (в частности, SIGHUP, если пользователь выходит из своей оболочки перед завершением фонового процесса) или отключением от stdin, stderr, stdout и любых других дескрипторов файлов, открытых во время вызова Popen. Если вы действительно имеете в виду, что вам нужен демон, вы должны использовать модуль python-daemon, реализацию PEP 3143. Это заботится о грубых деталях, о которых вы не хотите думать.