Objective-C中执行终端命令的两大方式——system/NStask
一、system语句
原型:system(const char *);
用法:
NSString* str = @"存放你要在终端执行的命令";
const char* cmd = [str UTF8String];
system(cmd);
//这里注意,如果你要执行多条命令,分开使用system执行是没有用的
//system("cd /xxx/xxx");
//system("open xxx");
//如果要执行多条命令,如下操作
system("cd /xxx/xxx;open xxx");
//其中的执行语句可以通过NSString字符串操作拼接成命令语句,再强制转换为const char*类型传入system执行
二、NStask
前提:你需要提前知道命令所依据的可执行文件的存放路径
比方说我想调用一个可执行文件symbolicatecrash,并给他传递所需要的参数,用法如下:
//命令:./symbolicatecrash ./test.crash /liveapp.crash > log.crash
NSTask *task = [[NSTask alloc] init];
//需要提前知道symbolicatecrash的所在位置
[task setLaunchPath:@"/Users/yewendi/Documents/./symbolicatecrash"];//设置调用路径
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
NSFileHandle *file = [pipe fileHandleForReading];
//设置参数
[task setArguments:[NSArray arrayWithObjects:@"./test.crash",@"./liveapp.crash",@">",@"log.crash" ,nil]];
[task launch];
//获取返回值并输出
NSData *data = [file readDataToEndOfFile];
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"%@", string);//打印执行输出
如果是执行一些系统自带命令,例子:
[task setLaunchPath:@"/bin/ls"];//设置调用路径
[task setArguments:[NSArray arrayWithObjects:@"-a" ,nil]];
修改一下这两行代码的参数即可。
tips:如果不知道系统调用的可执行文件路径所在,可以在终端输入export,查看PATH,挨个去找一下看看在哪个路径里
如果有不懂的可以评论留言哦~