python - 有没有办法让进程的pid开始使用批处理文件?
问题描述
所以今天我开始了一个有趣的项目。我希望能够使用不和谐机器人启动和停止我的世界服务器。为了启动服务器,我决定使用批处理文件来执行命令。这很简单,我能够验证它是否工作,因为我可以运行它并加入“localhost”服务器。
下一步是在 Python 中创建一个不和谐的机器人,我以前做过,也没有花很长时间。我能够在我制作的测试不和谐服务器上验证该机器人是否响应了命令。
最后一步是制作 discord bot 的命令来启动和停止服务器。我能够使用该subprocess
库来调用批处理文件并启动服务器。
我的困难是关闭服务器。我打算在运行正确的命令时使用子进程的 pid 来杀死它。但是,我遇到了获取服务器 pid 的问题,因为 subprocess.pid() 让我获得了批处理文件的 pid(我认为)。当我尝试结束它后连接到服务器时,我能够连接。
有没有办法获得以批处理文件启动的进程的 pid?如果您需要查看代码或批处理文件,请告诉我!
我还尝试运行批处理文件直接运行的命令,但在权限问题上苦苦挣扎,所以我不确定这是不是更好的解决方案。
解决方案
如果您想查找由与当前批处理/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"
并将输出重定向到您以后可以阅读的文件。
推荐阅读
- python - 将密集张量切成参差不齐的平面值
- sockets - 如何在服务器终止时始终优雅地断开套接字?
- sql - 检查 presto/hive 表中是否存在列名
- python - 当我从另一个文件调用函数时,为什么会出现此错误?
- python - 在 AWS Lambda Python 中读取 HTTP POST 键/值
- r - 合并后变量观察消失
- javascript - 如何压缩 HTML/JAVASCRIPT/CSS 网页以与在嵌入式设备上运行的 Web 服务器一起使用?
- java - 使用 CsvToBeanBuilder(FileReader()) 的 OpenCSV 错误
- typescript - Typescript 条件类型的有效解析类型不允许映射回条件类型
- php - 如何在 Laravel 中同时保存模型和相关模型?