如何按名称

时间:2018-03-31 23:48:53

标签: python taskkill psutil

我正在为朋友制作一个Minecraft控制台客户端脚本 它基于txt文件打开控制台客户端

我想出了如何杀死/终止窗口,但是这部分没有物理关闭窗口,只是将它设置为正常的命令提示符窗口,因为它是使用批处理命令创建的

如何完全按名称关闭程序,就像按下应用程序右上角的“x”按钮一样。

    os.system("taskkill /f /im MinecraftClient.exe")
 //for proc in psutil.process_iter():
   //  if proc.name() == "MinecraftClient.exe":
   //      proc.terminate()
   //      reap_children()

这些都没有实际关闭.exe只是将其更改为命令提示符窗口。而且我不想再次通过psutil.process_iter()中的for proc来关闭命令提示符窗口。

编辑1:

如何打开MinecraftClient.exe请记住它是从github下载的控制台客户端

def connect(file, directory, executeds):
with open(file) as file:
    for line in file:
        #stdout=PIPE, stderr=PIPE, stdin=PIPE,
        lines = line.split(":")
        login = lines[0]
        password = lines[1]
        IP = lines[2]
    //     CREATE_NEW_PROCESS_GROUP = 0x00000200
   //      DETACHED_PROCESS = 0x00000008
        command = "MinecraftClient.exe {0} {1} {2}".format(login, password, IP)
        executed = Popen("start cmd /K " + command, cwd=directory, shell=True)
        out, err = executed.communicate()
        executeds.append(executed.pid)
        if executed.returncode == 0:
            print("Connected {0} to {1} successfully".format(login, IP))
        else:
            print("Failed to connect {0} to {1}.".format(login, IP))
            print("{0}".format(err))

        time.sleep(3)

我没有使用的一些东西,因为它们只是测试

1 个答案:

答案 0 :(得分:0)

我刚检查过,我找不到任何名为MinecraftClient.exe的东西。 Minecraft进程实际上被称为javaw.exe - 尝试杀死它。如果这不是问题,我使用subprocess模块管理它:

import subprocess
subprocess.call("taskkill /f /im javaw.exe", shell=True)

shell=True阻止它在您的屏幕上打开命令提示符。

编辑
您的屏幕截图显示它最终变为cmd.exe - 尝试将其删除? 好的,在下载程序后,我设法使用subprocess.call('taskkill /f /im MinecraftClient.exe & taskkill /f /im cmd.exe', shell=True)

成功杀死了它