2013-07-20 40 views
0

我正在編寫一個可以遠程運行shell命令的應用程序。我需要以管理員身份運行命令:tc -l 455。我決定使用管理權限在applescript中運行這個命令,但是在目標c中,我需要將這個輸出顯示在NSTexView中。這裏是我的代碼:將Applescript Shell輸出返回到Objective C

NSAppleScript* runWithAdminPrivileges = [[NSAppleScript alloc] initWithSource:@"do  shell script \"nc -l 455\" with administrator privileges"]; 
NSDictionary *error = [[NSDictionary alloc] init]; 
[runWithAdminPrivileges executeAndReturnError:&error]; 
NSLog(@"%@", error); 

該命令正​​在運行,但我沒有辦法看到輸出。有沒有辦法用我的代碼做到這一點,或者有沒有辦法用管理權限在目標c中運行這個shell命令並查看輸出結果?

由於提前,

+0

你可以用'NSTask':如何使用NSTask爲根?](http://stackoverflow.com/q/4050687)爲架構x86_64的 –

+0

未定義的符號: 「_OBJC_CLASS_ $ _STPrivilegedTask」,從引用:在AppDelegate.o LD objc級-REF:符號(多個)未找到架構x86_64的 鐺:錯誤:連接器命令,退出代碼1失敗(使用-v看調用) – jamespick

+0

這是我運行STPrivilegedTask時得到的錯誤 – jamespick

回答

1

-[NSAppleScript executeAndReturnError:]返回你忽略了一個結果,這是腳本的結果。這是一個NSAppleEventDescriptor,而不是NSString,但你可以通過調用-stringValue來獲得一個NSString。此外,error參數遵循與其他地方的NSError **參數相同的規則,因此您不需要先用對象填充它。綜上所述:

NSDictionary *errorInfo; // no initialization necessary. 
NSAppleEventDescriptor *scriptResult = [runWithAdminPrivileges executeAndReturnError:&error]; 
if (scriptResult) 
    NSLog(@「%@「, [scriptResult stringValue]); 
else 
    NSLog(@「%@「, errorInfo;