python:创建一个分离的进程并通过命令行与之通信

python:创建一个分离的进程并通过命令行与之通信,python,asynchronous,Python,Asynchronous,我想创建一个命令行工具,它是一个带有一些自定义功能的倒计时工具 我的想法是使用python脚本启动一个在后台工作的进程(例如,在接近尾声时播放声音)。一旦计时器进程运行,我想通过命令行与之通信(发送诸如“剩余”之类的查询或诸如“开始XXmin”和“停止”之类的命令)。当然,计时器进程应该只有一个实例 用法可能看起来像 >>> timer start 25min >>> timer remaining 17:34 min remaining >>

我想创建一个命令行工具,它是一个带有一些自定义功能的倒计时工具

我的想法是使用python脚本启动一个在后台工作的进程(例如,在接近尾声时播放声音)。一旦计时器进程运行,我想通过命令行与之通信(发送诸如“剩余”之类的查询或诸如“开始XXmin”和“停止”之类的命令)。当然,计时器进程应该只有一个实例

用法可能看起来像

>>> 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
库为我做了什么,也不知道它没有为我做什么。