如何使用Python在Mac OS X上启动前台应用程序?

4

当我在Mac OS X上使用subprocess.Popen启动应用程序时,它会在后台运行,你必须点击dock中的图标才能将其置于前台。如何使它在前台启动?

我尝试过使用“open”,但那会创建一个不想要的终端窗口。

注意:该应用程序是从使用wxPython编写的GUI应用程序中启动的。

2个回答

3
我认为你需要使用本地API和一些Python绑定。NSRunningApplication及其方法activateWithOptions是你需要的。以下是如何使用它的示例:How to launch application and bring it to front using Cocoa api?。 使用PyObjC进行绑定。
from Foundation import *
from Cocoa import *
import objc

pid = 1456 
x = NSRunningApplication.runningApplicationWithProcessIdentifier_(pid)
x.activateWithOptions_(NSApplicationActivateAllWindows)

更新:

以下行更加积极地启动应用程序。

x.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)

另外,您可能需要首先使用.unhide()方法将应用程序显示。

x.hide()     
x.unhide()

谢谢回复。我发现使用带有-a标志的open命令可以正常工作,而且不会创建终端。 - Luke McCarthy
PyObjC已经随着OSX一起安装了,您不需要再进行安装。同时请查看我的回答更新。 - snies

2

Snies的答案对我有用。然而,由于您只需要NSRunningApplication和NSApplicationActivateIgnoringOtherApps,因此您可能不需要导入其他所有内容。下面的方法对我有效,并且速度更快:

from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
pid = 1456 
x = NSRunningApplication.runningApplicationWithProcessIdentifier_(pid)
x.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接