制作一个正在运行的程序,使其在运行时接受外部命令

时间:2018-08-09 04:29:35

标签: python

如何创建一个程序,以便在另一个程序都运行时从另一个程序接收命令?

我的程序需要使用一些模块,而这些模块需要主程序中的某些类,但是,该程序需要正在运行,或者功能无法正常工作

我尝试过:

main.py:

import discord
import command

client = discord.Client()
server = discord.utils.get(client.servers, name='my server')

class User:
    def __init__(self, user):
        self.user = user
    def add_role():
        role = discord.utils.get(server.roles, name=role)
        client.add_roles(self.user, role)

if __name__ == '__main__':
    client.run('my token')
    command.execute()

command.py:

import main

def execute():
    #do some stuff and get a user object
    my_user = main.User(user_obj)
    my_user.add_roles('mod')

但是add_roles函数无法获取服务器,因为客户端未运行 如果我将client.run放在main之外,则客户端会尝试运行两次

command.py函数确实需要位于main.py之外

我认为的解决方案是使command.py成为另一个进程,并将命令发送到main.py进程,例如“ ADD ROLE(USER)”,这对于我遇到的其他问题很有用

但是我不知道该如何实现

1 个答案:

答案 0 :(得分:0)

我用rpyc建立了本地连接, 像这样的东西:

main.py:

class Network(rpyc.Service):
    def __init__(self):
        super(Network, self).__init__()

        #Objects to share with modules
        self.User = User

        #Start connection
        conn = ThreadedServer(self, port=10000, protocol_config={"allow_public_attrs": True})
        t = Thread(target=conn.start)
        t.daemon = True
        t.start()


if __name__ == '__main__':
    conn = Network()

command.py:

conn = rpyc.connect("localhost", 10000)
User = conn.root.User

def execute():
    #do some stuff and get a user object
    my_user = User(user_obj)
    my_user.add_role('mod')