从Objective C执行命令

Abh*_*nav 2 macos cocoa command-line objective-c

我想从目标C(Cocoa框架)执行命令.我正在尝试的命令如下.我尝试使用NSTask但是当我执行它时它说"启动路径无法访问".

sudo ifconfig en0 down 
Run Code Online (Sandbox Code Playgroud)

我的代码是:

- (void)testme {
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"sudo ifconfig en0 down"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"foo", @"bar.txt", nil];
[task setArguments: arguments];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"command returned:\n%@", string);

[string release];
[task release];
Run Code Online (Sandbox Code Playgroud)

}

dus*_*uff 5

sudo ifconfig en0 down不是一个明智的发射路径.此命令的正确启动路径是/usr/sbin/sudo.

完成后,您仍需要传递正确的参数setArguments:.foobar.txt看起来像你不读复制示例代码.

更重要的是,sudo从NSTask 运行是行不通的.您需要使用授权服务来启动特权命令.

  • 你不能.使用授权服务. (3认同)