从shell脚本读取实时输出并更新进度条

时间:2009-08-23 22:28:25

标签: objective-c cocoa shell progress-bar

我有一个shell脚本,它将一个数字列表(1,2,依此类推,每行一个)记录到日志文件中。我需要我的ObjC应用程序每隔X秒读取一次日志文件,然后根据日志文件中记录的最后一个数字相应地更新我的进度条。

最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

为什么不使用NSFileHandle的readInBackgroundAndNotify呢?这样,只有在文件中确实发生了某些事情时才会运行代码。

答案 1 :(得分:0)

您可以创建一个NSTimer实例,并且每隔X秒调用一次,它会调用另一个负责读取文件和更新进度条的方法。该方法可以使用NSString的stringWithContentsOfFile:将文件读入字符串,然后适当地解析它。

例如:

// Create the invocation of the method to call
NSUInteger X = 2; // Change depending on how often you want the timer fired
NSMethodSignature *signature = [self methodSignatureForSelector:@selector(read)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];

// Create the timer, adding it to the default run loop
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:X
                                              invocation:invocation
                                                 repeats:YES];

稍后,您定义选择器read

- (void)read {
    NSString *fileContents = [NSString stringWithContentsOfFile:@"aFile.txt"];
    NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];
    NSString *lastLine = [lines lastObject];

    // Your own parsing and updating code here
}

如果您需要明确的停留点,可以将timer存储在班级内的ivar中,然后只要[timer invalidate];内的解析代码确定您已完成任何操作,就会调用read你正在执行的过程。

相关文档: