在macOS上用Terminate()调用时,打开的程序不会关闭。
我试图通过python打开一个外部文件,然后关闭它。除了在macOS上终止进程(应用程序)外,其他所有事情似乎都在起作用。如何杀死它?
prog = subprocess.Popen(['open', FileName])
while True:
if keyboard.is_pressed("q"):
prog.terminate()
break
答案 0 :(得分:0)
不太容易。
在Mac中,open
命令将在系统中进行挖掘,以找到启动文件的应用程序,这意味着它将分叉执行另一个可执行文件作为新进程。完成后,open
命令将终止,同时保持另一个进程的运行(在后台,作为孤立的进程)。
因此,使用subprocess
上下文,您将看到open
的进程ID,但看不到open
启动的子进程的进程ID。此外,考虑open
启动目录的情况,在Mac上它将在Finder中作为新窗口打开。这样就没有创建新的进程ID!对于其他文件,如果在调用open
之前调用的应用程序已在运行,并且对其他文件也是如此,则它宁愿在现有进程的新 tabs 中打开新文件。
在您的情况下,如果想要更好的控制,可能需要找出合适的应用程序来打开文件,然后直接启动文件,而不是依靠open
。
修改:
这是开放的man page。您可以使用一些开关使打开运行,直到子进程终止,依此类推。但是,我仍然不确定您可以通过杀死open来杀死子进程(是否成功取决于很多因素)。可能您需要找出子进程的进程ID并直接将其杀死。