【发布时间】:2015-01-05 08:32:24
【问题描述】:
我在 Windows 平台上工作。在我的 python 脚本中,我可以通过以下方式调用外部程序:
os.system("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
os.popen("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
subprocess.call(["C:\mainfolder\menu.exe","C:\others\file1.inp" "C:\others\file2.inp"])
地点:
menu.exe:是我的外部程序。
file1 和 file2:是我的外部程序的输入文件。
以上所有工作正常。现在我的外部程序已经成功完成,我需要完全关闭它以及它打开的所有窗口。我浏览了许多其他帖子、python 文档等,并找到了一些命令,例如:
os.system("taskkill /im C:\mainfolder\menu.exe")
os.kill(proc.pid,9)
child.kill()
但他们没有工作。我花了很多时间试图找到对我有用的东西,直到我意识到无论我输入哪个命令,它们都不会被读取,因为计算机不知道我的外部程序已经完成。这就是为什么我可以随时通过键入 taskkill /im menu.exe 从命令行轻松终止程序,而不是从 python。
有人知道如何解决这个问题吗?当我调用外部程序时,我是否应该包含其他内容?
【问题讨论】:
-
如果您调用的程序打开了其他程序,您可能对此无能为力。不过我不确定。
-
说真的?,我对编程了解不多,但我一直认为在编程中一切皆有可能。希望我能找到答案:-(
-
如果您可以修改打开的程序以在它们关闭之前/关闭时向您的进程发送信号(例如通过 DBus),您可以使用 IPC 来解决这个问题。
-
你不能对它做任何事情并不是真的,只是答案可能对于windows来说被深深地隐藏了。在 linux 中,使用 -9 开关 kill 将终止所述进程及其子/父进程,我不确定 taskkill 的哪个开关与此等效。
-
实际上,您是否尝试将 /F 添加到您的 taskkill 中?
标签: python windows terminate external-process