我正在尝试确定哪个OSX应用程序当前处于活动状态.据我所知,在OSX 10.5中,可以通过以下方式完成:
[[NSWorkspace sharedWorkspace] activeApplication]
Run Code Online (Sandbox Code Playgroud)
但是,这已经在10.6+中被弃用了.
Apple开发人员文档指出,这应该通过NSRunningApplication对象的"active"属性来完成.我认为解决这个问题的一种方法可能是获取所有正在运行的应用程序的列表
[[NSWorkspace sharedWorkspace] runningApplications]
Run Code Online (Sandbox Code Playgroud)
然后循环,检查每个应用程序的"活动"属性.但是,以下测试代码的行为与我的预期不同:从Terminal.app编译和运行时,无论是否选择其他应用程序,只有"终端"应用程序被标记为活动状态.
#import <Foundation/Foundation.h>
#import <AppKit/NSRunningApplication.h>
#import <AppKit/NSWorkspace.h>
int main(int argc, char *argv[]) {
while(1){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *currApp;
NSArray *runningApps;
runningApps = [[NSWorkspace sharedWorkspace] runningApplications];
for (id currApp in runningApps) {
if ([currApp isActive])
NSLog(@"* %@", [currApp localizedName]);
else
NSLog(@" %@", [currApp localizedName]);
}
sleep(1);
[pool release];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我误解了"活跃"财产是如何运作的吗?
(另外,请随意批评我的Objective C代码---这是我在目标C上的第一次尝试,所以我知道它很可能对训练有素的眼睛很难看!请原谅我!:)欢迎任何建议.)
简而言之,我的问题是,当我尝试使用virtualenvwrapper中的mkvirtualenv创建virtualenv时,我收到以下错误:
$ mkvirtualenv test
New python executable in test/bin/python
ERROR: The executable test/bin/python could not be run: [Errno 13] Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,当我查看二进制文件的权限时,据我所知,一切都应该没问题......
$ ll ~/.virtualenvs/test/bin
total 2604
drwxr-xr-x 1 (username) staff 5 Feb 7 19:10 ./
drwxr-xr-x 1 (username) staff 5 Feb 7 18:51 ../
-rwxr-xr-x 1 (username) staff 2655776 Feb 7 19:10 python*
lrwxrwxrwx 1 (username) staff 6 Feb 7 19:10 python2 -> python*
lrwxrwxrwx 1 (username) staff 6 Feb 7 19:10 python2.7 -> python*
Run Code Online (Sandbox Code Playgroud)
当我尝试以root身份运行时,我收到类似的错误:
$ sudo .virtualenvs/test/bin/python …Run Code Online (Sandbox Code Playgroud) permissions virtualenv virtualenvwrapper python-2.7 ubuntu-12.10