如何终止由另一个函数创建的子进程?

2024-10-02 14:19:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道为什么我不能用另一个函数终止从一个函数产生的批处理文件。在

我要做的是通过Telebot在我的专用计算机上管理批处理文件。在

我的test.bat文件: 在

title test.bat
timeout /t 999

我编写了一个单独的模块,其中包含启动和终止此批处理文件的函数: 在

^{pr2}$

当我使用/start_test命令启动批处理文件时,它工作正常,批处理文件启动正常:

import telebot 
import sidimanager

bot = telebot.TeleBot('TOKEN')
sidim = sidimanager.sidim()


@bot.message_handler(commands=['start_test'])
def handle_start_test(message):
    sidim.launch_test()
    bot.reply_to(message, 'Test .bat file has been successfuly launched.')

但当我试图用/kill_test命令终止此批处理时,批处理文件忽略了这一点并继续工作:

@bot.message_handler(commands='kill_test')
def handle_kill_test(message):
    sidim.kill_test()
    bot.reply_to(message, 'Test .bat file has been successfuly killed.')

我怎么能杀了它?在


Tags: 文件函数testimport命令messagebotstart
1条回答
网友
1楼 · 发布于 2024-10-02 14:19:39

我正在通过一个新的cmd.exe进程调用批处理。在某些情况下,它感觉批处理中的命令是在“后台”中运行的:

import subprocess

test_proc = subprocess.Popen(['cmd',  '/c',  'C:/temp/myBatch.bat'], creationflags=subprocess.CREATE_NEW_CONSOLE)
test_pid = test_proc.pid

现在,您将批处理隔离在一个新的CMD进程中运行,可以通过Popen使用taskkill /F /PID 1234轻松地终止该进程。在

注意:根据“主脚本”的启动方式,您可能需要提供cmd.exe, taskkill.exe and your batch的完整路径。在

相关问题 更多 >