كيفية تدفق الإخراج في backticks في بيرل؟
سؤال
إذا كان لدي هذا التطبيق بيرل:
print `someshellscript.sh`;
يطبع مجموعة من الأشياء ويأخذ وقتا طويلا لإكماله، كيف يمكنني طباعة هذا الإخراج في منتصف تنفيذ البرنامج النصي SHELT؟
يبدو أن بيرل ستطبع فقط نتيجة someshellscript.sh عند اكتمالها، هل هناك طريقة لجعل إخراج تدفق في منتصف التنفيذ؟
المحلول
ما تريد القيام به هو شيء مثل هذا:
open(F, "someshellscript.sh|");
while (<F>) {
print;
}
close(F);
هذا يعمل someshellscript.sh
ويفتح أنبوب يقرأ إخراجه. ال while
يقرأ حلقة كل سطر من الإخراج الناتج عن البرنامج النصي وطبعه. انظر افتح صفحة الوثائق لمزيد من المعلومات.
نصائح أخرى
المشكلة هنا هي أن الهروب مع backticks يخزن البرنامج النصي الخاص بك إلى سلسلة، والتي تطبعها بعد ذلك. لهذا السبب، لن يكون هناك طريقة "تدفق" مع الطباعة.
عند استخدام الأمر System () يجب طباعة الإخراج بشكل مستمر، لكنك لن تتمكن من التقاط الإخراج:
system "someshellscript.sh";
لا تنتمي إلى StackOverflow