当我在 Mac OS X 上使用 subprocess.Popen 启动应用程序时,它会在后台启动,您必须单击 Dock 中的图标才能将其带到前面。我怎样才能让它在前台开始?
我曾尝试使用“打开”,但这会创建和不需要的终端窗口。
注意:该应用程序是从使用 wxPython 编写的 GUI 应用程序启动的。
当我在 Mac OS X 上使用 subprocess.Popen 启动应用程序时,它会在后台启动,您必须单击 Dock 中的图标才能将其带到前面。我怎样才能让它在前台开始?
我曾尝试使用“打开”,但这会创建和不需要的终端窗口。
注意:该应用程序是从使用 wxPython 编写的 GUI 应用程序启动的。
我认为您将需要使用本机 API 和一些 python 绑定。
NSRunningApplication和它的方法activateWithOptions是你所需要的。这是一个如何使用它的示例:如何使用 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()
Snies' answer worked for me. However, since you only need NSRunningApplication and NSApplicationActivateIgnoringOtherApps, you might as well not import everything else. The following worked for me and was considerably faster:
from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
pid = 1456
x = NSRunningApplication.runningApplicationWithProcessIdentifier_(pid)
x.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)