子进程与Popen通信不起作用

时间:2019-03-27 09:05:16

标签: python subprocess popen

我正在尝试制作一个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")

谢谢!

编辑:请随意摆弄encodinguniversal_newlines参数,它们只是在我眼中试图使某些东西起作用。

0 个答案:

没有答案