سؤال

إذا كان لدي هذا التطبيق بيرل:

print `someshellscript.sh`;

يطبع مجموعة من الأشياء ويأخذ وقتا طويلا لإكماله، كيف يمكنني طباعة هذا الإخراج في منتصف تنفيذ البرنامج النصي SHELT؟

يبدو أن بيرل ستطبع فقط نتيجة someshellscript.sh عند اكتمالها، هل هناك طريقة لجعل إخراج تدفق في منتصف التنفيذ؟

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

المحلول

ما تريد القيام به هو شيء مثل هذا:

open(F, "someshellscript.sh|");
while (<F>) {
    print;
}
close(F);

هذا يعمل someshellscript.sh ويفتح أنبوب يقرأ إخراجه. ال while يقرأ حلقة كل سطر من الإخراج الناتج عن البرنامج النصي وطبعه. انظر افتح صفحة الوثائق لمزيد من المعلومات.

نصائح أخرى

المشكلة هنا هي أن الهروب مع backticks يخزن البرنامج النصي الخاص بك إلى سلسلة، والتي تطبعها بعد ذلك. لهذا السبب، لن يكون هناك طريقة "تدفق" مع الطباعة.

عند استخدام الأمر System () يجب طباعة الإخراج بشكل مستمر، لكنك لن تتمكن من التقاط الإخراج:

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