سؤال

وأنا أحاول أن أكتب سيناريو بسيط حول عرجاء لتخصيص برنامج للاستخدامات بلدي محددة. ما أود القيام به هو تحليل الخروج فقط من اكتمال المئة من الناتج عرجاء.

وإليك ما يبدو خط مثل الآن:

./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

والسطر الأخير من التعليمات البرمجية تحديث حيوي كما يتم تحويل الملف. عندما كنت نسخ / لصق / صدى / الأنابيب هذا النص المحدد في بلدي البقرى أنه يجد 17٪ على ما يرام، ولكن عندما تشغيله لريال مدريد، فإنه يجد اللاشيء.

وتحرير: عندما أرمي الإخراج من عرجاء في ملف نصي، هنا هو ما تبدو نتائج مثل:

ويبدو أنني قد يدفع الإخراج إلى ملف مؤقت وقراءة نسبة كاملة من هناك، ولكن أن يشعر محرجا، مثل أن تكون هناك طريقة أكثر أناقة للقيام بذلك.

هل كانت مفيدة؟

المحلول 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];
  }
}

نصائح أخرى

وأظن أنك قد لا تكون قادرة على القيام بذلك. سوف إخراج نسبة ربما تذهب إلى محطة عبر الشتائم (وللسماح في- وضع التحديث الديناميكي)، وهكذا سوف يكون هناك انتاج محدود عبر المعياري.

قد يكون من المفيد إعادة توجيه الإخراج إلى ملف ونرى ما يحصل كتابة هناك. أي بمعنى.

lame > /tmp/lame.log

وعرجاء وربما لا إخراج هذه المعلومات بالطريقة نفسها عندما لا تكون متصلا محطة. حاول تشغيل قيادة عرجاء مع نهاية "> output.txt" وننظر إلى ما يدور الطباعة عندما تعلق على عملية أخرى.

وهذا احتمال وارد جدا الأخرى هي أن "17٪" أبدا الطباعة فعلا. ما هو على الارجح الطباعة هي:

و٪، تحرك اليسار، 1، تحرك اليسار، 2، تحرك اليسار 3، ... تحرك اليسار، تحرك اليسار، 1، 7، غادر الخطوة 8، الخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top