关闭cmd终端的正确方法是什么?

问题描述 投票:0回答:1

所以我有简单的程序 我用 Python tkinter 制作的

它会打开一个cmd窗口并执行

sfc /scannow

我想弄清楚的是,如果我点击右上角的 X 我得到了^C。

如何防止这种情况发生?如何正确关闭窗户?

我尝试将其放入带有键盘中断的 try 块中,但这似乎不起作用

我尝试了几种不同的方法来使用kill,但我不清楚它应该如何工作

def sfc_scannow():
    # sfc / scannow
    if not pyuac.isUserAdmin():
        statusbar.set('Access is denied, you are not an admin')
        root.after(5000, lambda: statusbar.set(''))
        # print('okM')  # for testing
    else:
        sfc_scannow_data()
        


def sfc_scannow_data():
    subprocess.Popen("start /wait sfc /scannow", shell=True)

我尝试将其放入带有键盘中断的 try 块中,但这似乎不起作用

python cmd subprocess
1个回答
0
投票

您可以使用子进程按名称终止任务:

subprocess.Popen('taskill /f /t /im ' + name_to_kill)

或者通过 processID 使用:

subprocess.Popen(subprocess.Popen('taskkill /f /t /PID ' + str(process.pid))

/pid ProcessID :指定要终止的进程的进程ID。

/im ImageName :指定要终止的进程的映像名称。使用通配符 (*) 指定所有图像名称。

/f :指定强制终止进程。对于远程进程,该参数被忽略;所有远程进程都被强制终止。

/t :指定终止所有子进程以及父进程,通常称为树终止

来自:https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb491009(v=technet.10)?redirectedfrom=MSDN

您可以使用 psutil

获取进程 ID
for process in psutil.process_iter():
    if process.name() == 'paint.exe':
       subprocess.Popen('taskkill /f /t /PID ' + str(process.pid))
© www.soinside.com 2019 - 2024. All rights reserved.