わかりました、私は方法を見つけました。これは Python のコードです (ここから取得)。いくつかのクリーニングとエラー処理が必要になる可能性がありますが、機能します。キーは、ApplicationServices からの文書化されていない CPSSetProcessName です。
def _osx_set_process_name(app_title):
""" Change OSX application title """
from ctypes import cdll, c_int, pointer, Structure
from ctypes.util import find_library
app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
if app_services.CGMainDisplayID() == 0:
print "cannot run without OS X window manager"
else:
class ProcessSerialNumber(Structure):
_fields_ = [("highLongOfPSN", c_int),
("lowLongOfPSN", c_int)]
psn = ProcessSerialNumber()
psn_p = pointer(psn)
if ( (app_services.GetCurrentProcess(psn_p) < 0) or
(app_services.SetFrontProcess(psn_p) < 0) ):
print "cannot run without OS X gui process"
print "setting process name"
app_services.CPSSetProcessName(psn_p, app_title)
return False
すぐに呼び出すと、Activity Monitor のプロセス名が変更されます。メニューバーの名前も変更するには、何らかの理由で短いタイムアウトの後に呼び出す必要がありました。
import gobject
gobject.timeout_add(100, _osx_set_process_name, "MyTitle")
これを .app パッケージと組み合わせると、Python アプリの非常に優れたシステム統合が得られることに注意してください。アイコン、Finder の表示名などを変更することはできますが、私が試したすべての方法では、CFBundleName (メニュー バーにあるもの) を「Python」のままにしておきます。(たとえば、この回答は長い名前(ドックアイコンの上に表示される)のみを変更します。ほとんど機能する他のものがたくさんあります。)
この回答は意図した結果をもたらしますが、あまりエレガントではありません。タイムアウトが必要な理由についての洞察をいただければ幸いです...最初にgtkをインポートするか、メインループを実行するときに、Pythonまたはpygtkがプロセス名自体を変更すると思います。