我正在尝试制作一个Discord机器人,该机器人将在 new 窗口中运行.bat文件(打开Minecraft服务器),以便PC的用户可以运行命令,但我也想成为能够在调用时以编程方式输入命令。我对Discord bot部分没有任何问题,可以打开窗口并可以运行服务器,但是无法以编程方式将命令写入服务器。这是我的代码:
servers = {}
@bot.command()
async def start(ctx, *, servername):
print(f"Starting {servername}")
path = os.path.join(os.getcwd(), servername)
print(path)
proc = subprocess.Popen([r"start", r"start.bat"], cwd=path, shell=True, stdin=subprocess.PIPE, encoding="utf8", universal_newlines=True)
servers[servername] = proc
await ctx.send(f"Server {servername} started.")
@bot.command()
async def stop(ctx, *, servername):
print(f"Stopping {servername}")
servers[servername].communicate(input="stop\n")# This is the line that isn't working
await ctx.send(f"Server {servername} stopped")
可以随意忽略这是一个Discord机器人的事实(我已从预览中排除了大部分代码),只是认为我应该包括该事实,以防它以我不知道的方式影响子流程。 / p>
没有引发错误,并且stop
函数的最后一行运行了,但是绝对没有发生servers[servername].communicate(input="stop\n")
谢谢!
编辑:请随意摆弄encoding
和universal_newlines
参数,它们只是在我眼中试图使某些东西起作用。