문제

나는 특정 용도로 프로그램을 사용자 정의하기 위해 절름발이 주위에 간단한 스크립트를 작성하려고합니다. 내가하고 싶은 것은 절름발이 출력의 완전성 만 파싱하는 것입니다.

다음은 지금 라인의 모습입니다.

./lame --nohist ~/Desktop/Driver.wav ~/Desktop/Driver.mp3 2>&1| egrep -o "\([0-9\%]+\)"

그러나 그것은 아무것도 돌려줍니다. 절름발이의 출력은 다음과 같습니다.

    LAME 3.99 (alpha 1, Jun  4 2009 19:42:31) 32bits (http://www.mp3dev.org/)
    warning: alpha versions should be used for testing only
    Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
    Encoding /Users/jkubicek/Desktop/Driver.wav
        to /Users/jkubicek/Desktop/Driver.mp3
    Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 
    1500/8765   (17%)|    0:02/    0:15|    0:03/    0:17|   14.654x|    0:14

마지막 코드 줄은 파일이 변환 될 때 동적으로 업데이트됩니다. 이 정확한 텍스트를 내 grep에 복사/붙여 넣을 때 17%는 잘 발견되지만 실제 용으로 실행하면 zilch를 찾습니다.

편집 : Lame에서 출력을 텍스트 파일에 던지면 결과가 다음과 같습니다.

lameout.txt

출력을 온도 파일로 밀고 완료하는 비율을 읽을 수있는 것처럼 보이지만 더 우아한 방법이 있어야하는 것처럼 어색한 느낌이 듭니다.

도움이 되었습니까?

해결책 3

나는 결국 사용했다 NSScanner 출력을 구문 분석합니다. 각 줄에서 NSTask 이 방법으로 전송되었습니다.

- (NSNumber *)parseOutputString:(NSString *)output {
  NSScanner *scanner = [NSScanner scannerWithString:output];
  NSString *endString = @"% complete";
  NSInteger percentComplete;
  BOOL didFindNumber = NO;

  while (![scanner scanString:endString intoString:nil]) {
        [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];
        didFindNumber = [scanner scanInteger:&percentComplete];

        if ([scanner isAtEnd]) {
              didFindNumber = NO;
              break;
        }
  }

  if (didFindNumber) {
        return [NSNumber numberWithInteger:percentComplete];
  } else {
        return [NSNumber numberWithInt:0];
  }
}

다른 팁

나는 당신이 이것을 할 수 없다고 생각합니다. 출력 백분율은 아마도 저주 (내 현지 업데이트를 허용하기 위해) STDOUT를 통해 제한된 출력이 발생합니다.

출력을 파일로 리디렉션하고 그곳에 작성되는 내용을 확인하는 것이 좋습니다. 즉

lame > /tmp/lame.log

절름발이는 아마도 터미널에 연결되지 않았을 때 동일한 방식 으로이 정보를 출력하지 않을 것입니다. 끝 "> output.txt"에 절름발이 명령을 실행하고 다른 프로세스에 첨부 될 때 인쇄하는 내용을 살펴보십시오.

다른 가능성은 "17%"가 실제로 인쇄하지 않는다는 것입니다. 아마도 인쇄는 다음과 같습니다.

%, 왼쪽으로 이동, 1, 왼쪽으로 이동, 2, 왼쪽으로 이동하고 ... 왼쪽으로 이동하고 왼쪽으로 이동, 1, 7, 왼쪽 8 등을 이동하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top