首页 > 其他 > 详细

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

时间:2021-05-04 17:34:09      阅读:21      评论:0      收藏:0      [点我收藏+]

一、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

原文:https://www.cnblogs.com/pionice/p/14729534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!