Mac OS X で subprocess.Popen を使用してアプリを起動すると、バックグラウンドで起動し、ドックのアイコンをクリックして前面に表示する必要があります。フォアグラウンドで開始するにはどうすればよいですか?
「open」を使用してみましたが、不要なターミナル ウィンドウが作成されます。
注: アプリは、wxPython を使用して作成された GUI アプリから開始されています。
Mac OS X で subprocess.Popen を使用してアプリを起動すると、バックグラウンドで起動し、ドックのアイコンをクリックして前面に表示する必要があります。フォアグラウンドで開始するにはどうすればよいですか?
「open」を使用してみましたが、不要なターミナル ウィンドウが作成されます。
注: アプリは、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の答えは私にとってはうまくいきました。ただし、必要なのは NSRunningApplication と NSApplicationActivateIgnoringOtherApps のみであるため、他のすべてをインポートする必要はありません。以下は私にとってはうまくいき、かなり高速でした:
from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps
pid = 1456
x = NSRunningApplication.runningApplicationWithProcessIdentifier_(pid)
x.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)