subprocess.Popen 正在创建两个进程而不是一个
subprocess.Popen is creating two processes instead of one
我正在使用这行代码创建子流程:
p = subprocess.Popen(["doesItemExist.exe", id], shell=False)
当我在任务管理器打开的情况下 运行 脚本时,我可以看到它创建了两个进程,而不是一个。问题是当我去杀死它时,它杀死了一个(使用 p.kill()),但没有杀死另一个。我试过在线查看,但我找到的唯一示例是关于 shell=True 的,他们的解决方案对我不起作用。我已经确认该行只被调用一次。
我能做什么? Popen 只给我一个 pid,所以我不知道如何得到另一个,所以我可以杀死两个。
我最终能够通过创建一个只使用以下内容的清理函数来处理这个问题:
subprocess.run(["taskkill", "/IM", "doesItemExist.exe", "/F"], shell=True)
这将终止所有剩余任务。如果有人使用它,请注意您的 exe 有一个唯一的名称,以防止您杀死任何您不想杀死的东西。如果要隐藏 output/errors,只需将 stdout 和 stderr 设置为 subprocess.PIPE。
此外,如果没有要终止的进程,它将报告为错误。
我正在使用这行代码创建子流程:
p = subprocess.Popen(["doesItemExist.exe", id], shell=False)
当我在任务管理器打开的情况下 运行 脚本时,我可以看到它创建了两个进程,而不是一个。问题是当我去杀死它时,它杀死了一个(使用 p.kill()),但没有杀死另一个。我试过在线查看,但我找到的唯一示例是关于 shell=True 的,他们的解决方案对我不起作用。我已经确认该行只被调用一次。
我能做什么? Popen 只给我一个 pid,所以我不知道如何得到另一个,所以我可以杀死两个。
我最终能够通过创建一个只使用以下内容的清理函数来处理这个问题:
subprocess.run(["taskkill", "/IM", "doesItemExist.exe", "/F"], shell=True)
这将终止所有剩余任务。如果有人使用它,请注意您的 exe 有一个唯一的名称,以防止您杀死任何您不想杀死的东西。如果要隐藏 output/errors,只需将 stdout 和 stderr 设置为 subprocess.PIPE。
此外,如果没有要终止的进程,它将报告为错误。