阅读 272

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

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

 

来源https://www.cnblogs.com/pionice/p/14729534.html

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐