[英]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.