簡體   English   中英

Python - 想要在它們都運行時將數據從一個腳本傳遞到另一個腳本

[英]Python - Wanting to pass data from one script to another while they are both running

所以我正在制作一個 Discord Bot,當一個人在 Twitch.tv 上直播時會發帖。 目前,我有一個運行機器人的 Python 程序和一個運行微型服務器以從 Twitch 服務器(webhook)接收數據的程序。 我不確定如何將從我的服務器收到的數據傳遞給不和諧機器人。 兩個程序必須同時運行。

不和諧機器人

import discord


client = discord.Client()




async def goes_live(data):
    print(data)
    print('Going Live')
    msg = '--- has gone live'
    await client.send_message(discord.Object(id='---'), msg)


@client.event
async def on_message(message):
    if message.author == client.user:
        return

    message.content = message.content.casefold()


@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')


client.run('---')

網絡服務器

import web

urls = ('/.*', 'hooks')

app = web.application(urls, globals())


class hooks:

    def POST(self):
        data = web.data()
        print("")
        print('DATA RECEIVED:')
        print(data)
        print("")

        return 'OK'

    def GET(self):
        try:
            data = web.input()
            data = data['hub.challenge']
            print("Hub challenge: ", data)
            return data
        except KeyError:
            return web.BadRequest



if __name__ == '__main__':
    app.run()

由於您的兩個程序都在 python 中,並且如果它們彼此足夠相關以至於它們總是一起運行,您可以簡單地使用multiprocessing模塊:讓每個程序作為一個multiprocessing.Process實例運行,並給每個程序multiprocessing.Pipe一端,這樣您就可以在進程之間交換信息。

架構看起來像 main.py 看起來像這樣:

# main.py
from multiprocessing import Process, Pipe
import program_1
import program_2

program_1_pipe_end, program_2_pipe_end = Pipe()

process_1 = Process(
    target = program_1.main,
    args = (program_1_pipe_end,)
    )

process_2 = Process(
    target = program_2.main,
    args = (program_2_pipe_end,)
    )

process_1.start()
process_2.start()
#Now they are running
process_1.join()
process_2.join()
# program_1.py and program_2.py follow this model

# [...]

# instead of if __name__ == '__main__' , do:
def main(pipe_end):
    # and use that pipe end to discuss with the other program
    pass

您可以在此處找到Pipe 文檔(在多處理文檔中)。

機器人和迷你服務器是否在同一台機器上運行? 在這種情況下,您只需讓服務器將文件寫入機器人可以定期訪問和檢查的位置。

如何使用處理兩個程序之間通信的 Flask 服務器。 您可以定義能夠獲取數據並將其發送到 discord 腳本的自定義端點。

@app.route('/ep1', methods = ['GET','POST'])
def ep1():
    if request.method == 'POST':
        #do something for a POST request. 
    else:
        #do something for a GET request.

你可以使用這個結構來構建一些東西來監聽變化,然后將它們發布到不和諧機器人。 您可能還需要考慮在 heroku 上托管此服務器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM