首页 > 解决方案 > 有没有办法让进程的pid开始使用批处理文件?

问题描述

所以今天我开始了一个有趣的项目。我希望能够使用不和谐机器人启动和停止我的世界服务器。为了启动服务器,我决定使用批处理文件来执行命令。这很简单,我能够验证它是否工作,因为我可以运行它并加入“localhost”服务器。

下一步是在 Python 中创建一个不和谐的机器人,我以前做过,也没有花很长时间。我能够在我制作的测试不和谐服务器上验证该机器人是否响应了命令。

最后一步是制作 discord bot 的命令来启动和停止服务器。我能够使用该subprocess库来调用批处理文件并启动服务器。

我的困难是关闭服务器。我打算在运行正确的命令时使用子进程的 pid 来杀死它。但是,我遇到了获取服务器 pid 的问题,因为 subprocess.pid() 让我获得了批处理文件的 pid(我认为)。当我尝试结束它后连接到服务器时,我能够连接。

有没有办法获得以批处理文件启动的进程的 pid?如果您需要查看代码或批处理文件,请告诉我!

我还尝试运行批处理文件直接运行的命令,但在权限问题上苦苦挣扎,所以我不确定这是不是更好的解决方案。

标签: pythonbatch-file

解决方案


如果您想查找由与当前批处理/cmd 实例相同的子进程启动的子进程,您可以使用 WMI 和getCmdPID.bat,这将在错误级别中返回 cmd 的当前 pid:

call getCmdPID
wmic path Win32_Process  where ParentProcessId='%errorlevel%' get

如果它在不同的 cmd 实例中,您可以使用 WMIC 启动服务器以获得启动的进程 PID:

WMIC process call create "c:\some.exe","c:\exec_dir"

并将输出重定向到您以后可以阅读的文件。


推荐阅读