Вызовите подпроцесс python как демон и выйдите - PullRequest
11 голосов
/ 21 января 2012

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 21 января 2012

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

import subprocess

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

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

7 голосов
/ 30 сентября 2015

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

...