python:创建一个分离的进程并通过命令行与之通信
我想创建一个命令行工具,它是一个带有一些自定义功能的倒计时工具 我的想法是使用python脚本启动一个在后台工作的进程(例如,在接近尾声时播放声音)。一旦计时器进程运行,我想通过命令行与之通信(发送诸如“剩余”之类的查询或诸如“开始XXmin”和“停止”之类的命令)。当然,计时器进程应该只有一个实例 用法可能看起来像python:创建一个分离的进程并通过命令行与之通信,python,asynchronous,Python,Asynchronous,我想创建一个命令行工具,它是一个带有一些自定义功能的倒计时工具 我的想法是使用python脚本启动一个在后台工作的进程(例如,在接近尾声时播放声音)。一旦计时器进程运行,我想通过命令行与之通信(发送诸如“剩余”之类的查询或诸如“开始XXmin”和“停止”之类的命令)。当然,计时器进程应该只有一个实例 用法可能看起来像 >>> timer start 25min >>> timer remaining 17:34 min remaining >>
>>> timer start 25min
>>> timer remaining
17:34 min remaining
>>> timer stop
timer stopped.
>>> timer start 90sec
在等待消息到达时,计时器进程需要什么样的外观才能完成其工作?反过来,接口脚本需要做什么来启动进程并在以后与之通信?使用一个单独的过程是实现我的目标的最好方法吗
我不知道该怎么做。我的想法听起来很简单,但我发现的几乎所有内容都与父脚本的子进程的并发性有关,这不是我想要的
谢谢。简单的方法是在shell中使用
&
在后台执行脚本。然后仅使用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系统上,甚至只是信号
另一种选择是使用模块来创建守护进程,并与之通信。这里需要的是基本的客户机-服务器体系结构。您将需要两个程序—一个在后台运行并侦听消息(服务器),另一个向服务器发送消息并处理响应(客户端)
有很多方法可以做到这一点,而且这个领域是合理的复杂,所以不要期望它是超级容易。对于刚开始的用户,我建议您使用标准库()使用一个简单的
http.server
server。对于客户端,我建议使用请求
。HTTP肯定不是本地客户机-服务器设置的最佳选择,但对于现有的库,它将是迄今为止最容易启动和运行的,一旦您对此感到满意,如果您愿意,您可以研究其他方法。这看起来很有希望,谢谢。假设可以自由选择编程语言或框架,那么完成这项任务最自然的方法是什么?可能某种RPC库最适合这类任务。虽然Python对于只有一个或几个开发人员的项目来说是一个很好的选择,但语言并不是很重要。Python有许多RPC库-在仔细查看之后,我可能会建议您签出gRPC:。看起来运行一个基本的设置将非常容易!谢谢,这确实很简单。这种方法是否独立于平台(假设windows、linux或mac)工作?我不知道python的os
库为我做了什么,也不知道它没有为我做什么。