grep'ing الإخراج من الناتج تحديثها باستمرار
سؤال
وأنا أحاول أن أكتب سيناريو بسيط حول عرجاء لتخصيص برنامج للاستخدامات بلدي محددة. ما أود القيام به هو تحليل الخروج فقط من اكتمال المئة من الناتج عرجاء.
وإليك ما يبدو خط مثل الآن:
./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، الخ.