发布
社区首页 >问答首页 >从作为python脚本的Linux进程调用类方法

从作为python脚本的Linux进程调用类方法
EN

Stack Overflow用户
提问于 2016-04-07 16:16:29
回答 2查看 50关注 0票数 1

Linux机器正在运行如下所示的进程:

代码语言:javascript
代码运行次数:0
复制
root     18983 18961  0 02:22 pts/0    00:00:04 /xxx/grpcEnv/bin/python /xxx/python/exabgp_shim/ExaBGP_server.py

python脚本ExaBGP_server.py基本上启动了一个服务器,并在无限的while循环中等待。该脚本还有一些定义了不同方法的类。

问题:

如何在进程已经运行的情况下调用上述python脚本的类方法?

EN

回答 2

Stack Overflow用户

发布于 2016-04-07 16:24:12

要做到这一点没有简单的方法,除非您在服务器中有代码,使您可以在解释器运行时或启动时访问解释器。

编辑:This "manhole" library看起来很适合您的用例,尽管像列出的其他想法一样,它确实需要对服务器代码进行一些修改才能实现。

这是你写的代码吗?如果是这样,您可以修改它以在后台线程中运行服务器,然后使用code模块在控制台上启动交互式解释器,并且可以访问适当的模块/类实例(如果需要)。这只适用于调试,因为这会有效地将非交互式服务器转换为交互式Python进程,该进程恰好在后台运行服务器。

Twisted库支持telnet或基于SSH的manhole特性,在这种特性中,您基本上可以在任何时候外壳到正在运行的Python进程中,但是将Twisted集成到非Twisted代码库中不值得为此特性而麻烦。我认为这个概念还有其他实现,包括一些提供了奇特的HTML/JS接口的实现,但是我手头没有这些名称/链接。

票数 2
EN

Stack Overflow用户

发布于 2016-04-07 17:34:32

这正是DBus解决的问题。它允许您从另一个流程调用方法。

我问了一个关于使用DBus、Register a "Hello World" DBus service, object and method using Python创建Hello World服务器的问题。

服务器的代码如下所示:

代码语言:javascript
代码运行次数:0
复制
import gobject
import dbus
import dbus.service

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)


OPATH = "/com/example/HelloWorld"
IFACE = "com.example.HelloWorld"
BUS_NAME = "com.example.HelloWorld"


class Example(dbus.service.Object):
    def __init__(self):
        bus = dbus.SessionBus()
        bus.request_name(BUS_NAME)
        bus_name = dbus.service.BusName(BUS_NAME, bus=bus)
        dbus.service.Object.__init__(self, bus_name, OPATH)

    @dbus.service.method(dbus_interface=IFACE + ".SayHello",
                         in_signature="", out_signature="")
    def SayHello(self):
        print "hello, world"


if __name__ == "__main__":
    a = Example()
    loop = gobject.MainLoop()
    loop.run()

您可以使用dbus-send来调用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36470424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档