[英]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
模塊來創建守護進程並與之通信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.