我想知道为什么我不能通过使用另一个函数来终止从一个函数引发的批处理文件。
我想做的是通过Telebot在我的专用计算机上管理批处理文件。
我的test.bat
文件:
title test.bat
timeout /t 999
我编写了一个单独的模块,该模块具有启动和终止此批处理文件的功能:
from os import path, kill
import subprocess
import signal
TEST_PATH = 'C:\\Users\\Administrator\\Desktop\\TEST\\'
un_proc = None
class sidim(object):
def __init__(self):
pass
def launch_test(self):
test_proc = subprocess.Popen([path.join(TEST_PATH,
'TEST.bat')],
creationflags=subprocess.CREATE_NEW_CONSOLE)
self.test_pid = test_proc.pid
def kill_test(self):
kill(self.test_pid, signal.SIGTERM)
当我使用/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.')
我怎么杀死它?
答案 0 :(得分:0)
我正在通过新的<div id = "NameXYZ">
<script src = "// 123.com"> </ script>
<script src = "// 1234.com"> </ script>
</div>
流程致电该批次。在某些情况下,感觉该批处理中的命令在“后台”中运行:
cmd.exe
现在,您正在以新的CMD流程隔离批处理运行,可以使用import subprocess
test_proc = subprocess.Popen(['cmd', '/c', 'C:/temp/myBatch.bat'], creationflags=subprocess.CREATE_NEW_CONSOLE)
test_pid = test_proc.pid
通过Popen轻松终止该批处理。
注意:您可能需要提供taskkill /F /PID 1234
的完整路径,具体取决于“主脚本”的启动方式。