【发布时间】:2021-06-22 12:04:37
【问题描述】:
我正在尝试制作一个不和谐机器人来通过不和谐启动我的我的世界服务器。这就是我目前所拥有的。
import os
import discord
import subprocess
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content == 'server!start':
await message.channel.send('Loading ngrok...')
#run terminal with ngrok
await message.channel.send('Loading minecraft server...')
#run terminal with minecraft server
if message.content == 'server!stop':
await message.channel.send('Stopping server...')
#stop minecraft and ngrok by killing terminal
在代码中,我想打开终端并执行 bash 脚本来运行服务器,然后,当需要关闭它时,我想杀死终端或将“停止”发送到控制台。
编辑:我尝试使用 subprocess.Popen,但我无法从另一个 if 语句关闭它,而不是我第一次执行该语句
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content == 'server!start':
await message.channel.send('Loading ngrok...')
ngrok = subprocess.Popen("/home/administrator/minecraft/server/startngrok.sh", shell=True)
#run terminal with ngrok
await message.channel.send('Loading minecraft server...')
minecraft = subprocess.Popen("/home/administrator/minecraft/server/startserver.sh", shell=True)
#run terminal with minecraft server
if message.content == 'server!stop':
await message.channel.send('Stopping server...')
ngrok.terminate()
server.terminate()
#stop minecraft and ngrok by killing terminal
enter code here
这是输出:
Ignoring exception in on_message
Traceback (most recent call last):
File "/home/administrator/.local/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "/home/administrator/minecraft/bot/bot.py", line 25, in on_message
ngrok.terminate()
UnboundLocalError: local variable 'ngrok' referenced before assignment
【问题讨论】:
-
到目前为止您尝试过什么?您认为哪些选项会起作用?
-
好吧,我正在尝试使用 subprocess.Popen。它允许我打开终端并运行服务器,但我不能在另一个语句中终止它,而不是运行它们。
-
您似乎走在了正确的轨道上。您是否研究过如何终止子进程?这是一个好的开始How to terminate a subprocess in Python 请做你的研究并尝试实施它
-
我想我已经完成了与此站点类似的所有操作,但我无法终止它。我仍然收到错误消息。看看编辑。
-
这个错误是不言自明的。它基本上意味着在那个范围级别,它不知道
ngrok是什么。您应该修复您的范围,以便两个 if 语句都可以访问子流程对象
标签: python python-3.x bash discord discord.py