تصحيح قراءة إخراج تطبيق Windows Console باستخدام Python

StackOverflow https://stackoverflow.com/questions/1684995

  •  18-09-2019
  •  | 
  •  

سؤال

هذا السؤال مشابه جدا هذا. وبعد أريد أن أقرأ الإخراج من تطبيق وحدة الألغام. التطبيق لا ينتهي، ولا يستغرق المدخلات من Stdin.

عندما أقوم بتعديل حل RIX0RRR لتنفيذ تطبيقي ثم قم بتشغيل محلوله، فإن Python Hangs لأن القراءة (1) لا يعود. الناتج الأولي للتطبيق هو "بدء الخادم. n". هل يمكنك تخمين اسم الممتلكات الخاصة بي قد يمنع حلاه من العمل؟ مدى تغييراتي هو أنني غيرت هذا:

p = Popen( ["cmd.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"^C:\\.*>", re.M)

الى هذا:

p = Popen( ["c:\\path\\to\\my\\app\\app.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"Starting", re.M)
import pdb;pdb.set_trace()

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

لقد جربت أيضا رمز Abrestate الذي يرتبط بيوتر مرتبط به في إجابته. لا يتم إرجاع أي إخراج من العملية في هذه الحالة، إما.

هذا هو بيثون 2.4.4 على نظام التشغيل Vista.

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

المحلول

أول شيء أتحقق منه هو التخزين المؤقت في app.exe. إذا تم تخزين "بدء تشغيل الخادم. n" ولا يجعلها على الأنبوب، فلا يوجد شيء يمكنك القيام به على جانب القارئ.

لذلك حاول إضافة fflush(stdout) بعد printf("Starting the server.\n").

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