【问题标题】:get a return value from a Daemon Process in Python从 Python 中的守护进程获取返回值
【发布时间】:2016-10-08 19:41:20
【问题描述】:

我写了一个可以使用以下命令启动和停止的python守护进程

/usr/local/bin/daemon.py start
/usr/local/bin/daemon.py stop

我可以通过从 python 脚本调用这些命令来获得相同的结果

os.system('/usr/local/bin/daemon.py start')
os.system('/usr/local/bin/daemon.py stop')

这工作得很好,但现在我希望在守护进程中添加一个功能,以便在我运行命令时

os.system('/usr/local/bin/daemon.py foo')

守护进程返回一个 Python 对象。所以,类似:

foobar = os.sytem('/usr/local/bin/daemon.py foo')

为了清楚起见,我已经在守护进程中准备好返回 Python 对象的所有逻辑,但我只是不知道如何将此对象传递给调用 Python 脚本。有什么办法吗?

【问题讨论】:

    标签: python unix daemon


    【解决方案1】:

    【讨论】:

    • marshal 主要供 Python 内部使用,仅支持真正的 Python 内置函数(因此不能与 Decimaldatetime 对象一起使用);我强烈建议使用pickle 进行通用序列化。
    【解决方案2】:

    你不是说要实现简单的序列化和反序列化吗? 在这种情况下,我建议查看 pickle (https://docs.python.org/2/library/pickle.html) 以在守护进程端将您的数据转换为通用文本格式,并在客户端将其转换回 Python 代码。

    【讨论】:

    • pickle 使用自己的序列化格式,而不是 json。
    • pickle 并不是真正的文本格式;它是协议 0 中的可打印 ASCII(Py2 上的默认值),因此所有字节都是 < 128 并且可打印,但它们只有一半可读性,以换取臃肿和缓慢。对于协议 1 及更高版本,文本完全是任意字节,根本不是文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多