繁体   English   中英

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

[英]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模块来创建守护进程并与之通信。

您在这里寻找的是基本的客户端-服务器体系结构。 您将需要两个程序-一个程序在后台运行并侦听消息(服务器),另一个程序将消息发送到服务器,并对响应做一些事情(客户端)。

很多方法可以做到这一点,而且该地区确实很复杂,所以不要指望它超级简单。 首先,我建议您尝试使用使用标准库( http服务器模块 )的简单http.server服务器。 对于客户端,我建议使用requests HTTP绝对不是本地客户端-服务器设置的最佳选择,但是使用现有的库,它将是迄今为止最容易启动和运行的库,一旦您对此感到满意,就可以研究其他方法如果你想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM