[英]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
機器人和迷你服務器是否在同一台機器上運行? 在這種情況下,您只需讓服務器將文件寫入機器人可以定期訪問和檢查的位置。
如何使用處理兩個程序之間通信的 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.