2016-04-07 6 views
0

PythonスクリプトであるLinuxプロセスからクラスのメソッドを呼び出す:下記のようなLinuxマシンは、プロセスを実行している

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スクリプトのクラスのメソッドを呼び出す方法は?

+0

実行するようスクリプトに依頼してください。 –

+0

@sashoalm:申し訳ありませんが、コメントはあまりにも重大なようです。 –

+0

OK、ごめんなさい。あなたは親切にExaBGP_server.pyの実際のコードを提供できますか?また、「メソッドを呼び出す」方法の例を提供できますか?それを**どこから呼び出すのですか? – sashoalm

答えて

1

サーバに実行中のインタプリタへのアクセスを許可するコードがある場合や、起動時にインタプリタにアクセスするコードがない限り、簡単に行うことはできません。

EDIT:This "manhole" libraryあなたのユースケースは有望ですが、他のアイデアと同様に実装するにはサーバーコードを変更する必要があります。

このコードはあなたが書いたものですか?その場合は、バックグラウンドスレッドでサーバーを実行するように変更してから、codeモジュールを使用して、適切なモジュール/クラスインスタンス(必要な場合)にアクセス可能な対話型インタプリタをコンソールで起動できます。これは、非対話型サーバーをバックグラウンドでサーバーを実行するインタラクティブなPythonプロセスに変えるため、デバッグにのみ有効です。

TwistedライブラリはtelnetまたはSSHベースのmanhole機能をサポートしていましたが、実行中のPythonプロセスをいつでも実行することができますが、Twistedを非ツイストコードベースに組み込むことはこの機能にとって問題にはなりません。私はこのコンセプトの他の実装があったと思います。それには、ファンシーなHTML/JSインターフェイスを提供するものもありますが、便利な名前やリンクはありません。

1

これはまさにDBusが解決する問題です。別のプロセスからメソッドを呼び出すことができます。

私はDBusを使用してHello Worldサーバーを作成することについて質問しました。Register a "Hello World" DBus service, object and method using Python

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を使用することができます。

これは、サーバー用のコードがどのように見えるかです。

関連する問題