簡體   English   中英

python:創建一個分離的進程並通過命令行與之通信

[英]python: Create a detached process and communicate with it via command line

我想創建一個命令行工具,它是一個倒計時計時器,具有一些我需要的自定義功能。

我的想法是使用python腳本啟動在后台執行工作的進程(例如,接近結束時播放聲音)。 計時器進程運行后,我想通過命令行與之通信(發送諸如“ remaining”之類的查詢或諸如“ start XXmin”和“ stop”之類的命令)。 當然,計時器進程應該只有一個實例。

用法可能看起來像

>>> timer start 25min

>>> timer remaining
17:34 min remaining

>>> timer stop
timer stopped.

>>> timer start 90sec

計時器進程在等待消息到達時需要什么樣的工作? 反過來,接口腳本需要做些什么來啟動該過程並在以后與之通信? 使用單獨的過程是實現我的目標的最佳想法嗎?

我不知道如何去做。 我的想法聽起來很簡單,但是我發現的幾乎所有內容都與父腳本的子進程的並發有關,這不是我想要的。

謝謝。

最簡單的方法是在外殼中使用&在后台執行腳本。 然后僅使用USR1和USR2信號與該過程進行通信。

在Python中,我猜最簡單的方法是使用守護程序模塊。

import daemon

def do_something():
    pass

if __name__ == "__main__":
    with daemon.DaemonContext():
       do_something()

或者,您可以fork()您自己的守護進程。

import os

def doSomething():
    pass

def createDaemon():
    try:
        # Store the Fork PID
        pid = os.fork()

        if pid > 0:
            print 'PID: %d' % pid
            os._exit(0)

        os.chdir("/") 
        os.setsid() 
        os.umask(0) 
    except OSError, error:
        print 'Unable to fork. Error: %d (%s)' % (error.errno, error.strerror)
        os._exit(1)

    doSomething()

然后,例如,您可以使用os.pipe與該守護進程進行通信。 在這種簡單的情況下,在* nix系統上,甚至只是信號。

另一個選擇是使用multiprocessing模塊來創建守護進程並與之通信。

您在這里尋找的是基本的客戶端-服務器體系結構。 您將需要兩個程序-一個程序在后台運行並偵聽消息(服務器),另一個程序將消息發送到服務器,並對響應做一些事情(客戶端)。

很多方法可以做到這一點,而且該地區確實很復雜,所以不要指望它超級簡單。 首先,我建議您嘗試使用使用標准庫( http服務器模塊 )的簡單http.server服務器。 對於客戶端,我建議使用requests HTTP絕對不是本地客戶端-服務器設置的最佳選擇,但是使用現有的庫,它將是迄今為止最容易啟動和運行的庫,一旦您對此感到滿意,就可以研究其他方法如果你想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM