我想创建一个命令行工具,它是一个倒数计时器,带有我需要的一些自定义功能。
我的想法是使用python脚本启动一个在后台工作的进程(例如,在接近结尾时播放声音)。一旦计时器进程正在运行,我想通过命令行与它进行通信(发送查询,例如“剩下的'或者像'启动XXmin'以及'停止' )。当然,应该只有一个定时器进程实例。
用法可能看起来像
>>> timer start 25min
>>> timer remaining
17:34 min remaining
>>> timer stop
timer stopped.
>>> timer start 90sec
在等待邮件到达时,计时器进程需要做什么才能完成工作?反过来,接口脚本需要做什么来启动进程并在以后与之通信?使用单独的流程是实现目标的最佳方法吗?
我不知道如何去做。我的想法听起来很简单,但我发现的几乎所有内容都与父脚本的子进程的并发性有关,这不是我想要的。
谢谢。
答案 0 :(得分:1)
简单的方法是在shell中使用connection.php
在后台执行脚本。然后只用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()
与该守护进程进行通信。在这个简单的例子中,在* nix系统上,甚至只是信号。
另一种选择是使用multiprocessing
模块来创建守护进程并与之通信。
答案 1 :(得分:1)
您在这里寻找的是基本的客户端 - 服务器架构。您需要两个程序 - 一个在后台运行并侦听消息(服务器),另一个程序向服务器发送消息,并对响应(客户端)执行某些操作。
有一些很多方法可以做到这一点,而且这个区域非常复杂,所以不要指望它非常简单。刚刚开始时,我建议您尝试使用标准库(http server module)来使用简单的http.server
服务器。对于客户端,我建议requests
library。对于本地客户端 - 服务器设置而言,HTTP绝对不是最佳选择,但对于现有的库,它是最容易启动和运行的,并且一旦您对此感到满意,如果你愿意,你可以考虑其他方法。