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,挨个去找一下看看在哪个路径里

Objective-C中执行终端命令的两大方式——system/NStask

 

 

 如果有不懂的可以评论留言哦~

上一篇:ansible.cfg


下一篇:Objective-C 之父去世,他推动了苹果软件生态的发展