14

本当に簡単な質問ですが、解決策が見つからないようです。

Python スクリプトがあり、独立したデーモン プロセスを起動したいと考えています。ym python スクリプトを呼び出し、このシステム トレイ デーモンを起動し、データベース ファイルに対して Python マジックを実行して終了し、システム トレイ デーモンを実行したままにします。

os.systemsubprocess.callsubprocess.Popenを試しましたos.execlが、システム トレイ デーモンを閉じるまでスクリプトは常に有効なままです。

これは簡単な解決策のように思えますが、何も機能しません。

編集: Windows のソリューション: os.startfile() http://docs.python.org/library/os.html?highlight=startfile#os.startfile

あきらめて質問することは、答えの頂点にいることを意味する場合があります。

4

3 に答える 3

7

Windows のソリューション:os.startfile()

実行可能ファイルをダブルクリックしたかのように機能し、独立して起動します。とても便利なワンライナー。

http://docs.python.org/library/os.html?highlight=startfile#os.startfile

于 2012-07-24T12:54:03.073 に答える
2

ダブルフォーク方式を使用することをお勧めします。

例:

import os
import sys
import time

def main():
    fh = open('log', 'a')
    while True:
        fh.write('Still alive!')
        fh.flush()
        time.sleep(1)

def _fork():
    try: 
        pid = os.fork() 
        if pid > 0:
            sys.exit(0) 
    except OSError, e: 
        print >>sys.stderr, 'Unable to fork: %d (%s)' % (e.errno, e.strerror) 
        sys.exit(1)


def fork():
    _fork()

    # remove references from the main process
    os.chdir('/')
    os.setsid()
    os.umask(0)

    _fork()

if __name__ == '__main__':
    fork()
    main()
于 2012-07-20T19:06:55.140 に答える