سؤال

أنا أستخدم IDE IDE (Microchip MPLAB) مع Toolchain C30 على نظام التشغيل Windows XP. يحتوي Compiler C على إخراج صاخب للغاية وأنا غير قادر على التحكم فيه، ومن الصعب جدا تحديد التحذيرات والأخطاء الفعلية في نافذة الإخراج.

أريد أن أكتب برنامج نصي ثعبان من شأنه أن يتلقى الحجج للمترجم، اتصل بالمترجم بنفس الحجج، ونتائج التصفية وإخراجها إلى Stdout.. وبعد ثم يمكنني استبدال برنامج التحويل البرمجي القابل للتنفيذ مع البرنامج النصي في إعدادات Toolchain. يدعو IDE إلى البرنامج النصي ويتلقى إخراج مترجم مفلوت.

يبدو أن التعليمات البرمجية الخاصة بي لتنفيذ المحول البرمجي يشبه هذا:

arguments = ' '.join(sys.argv[1:])
cmd = '%s %s' % (compiler_path, arguments)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

المشكلة هي أن اقتباسات من الوسائط يتم استهلاكها في تنفيذ البرنامج النصي، لذلك إذا استدعي IDE النصي الخاص بي مع الوسائط التالية:

Main.c -o "Main.o"

قيمة ال الحجج يكون

Main.c -omain.o.

الحل الأكثر وضوحا هو وضع قائمة الحجة بأكملها في علامات الاقتباس، ولكن هذا سيتطلب تعديل في رمز الاتصال البرمجي في IDE. حاولت أيضا استخدام ملف دفعي، ولكن يمكن أن نقبل فقط تسعة معلمات (٪ 1 إلى٪ 9)، وتسمى مترجم مع 15+ معلمات.

هل هناك طريقة لإعادة توجيهها بالضبط نفس الحجج إلى عملية من البرنامج النصي؟

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

المحلول

تقوم شلتك بتناول الاقتباس (البرنامج النصي Python حتى لا يتلقىها حتى الآن) لذلك أفترض أنه ليس من السهل للغاية الحصول عليها "غير مستحق".

نصائح أخرى

امنح وسيطات الأوامر بالبثق كقائمة:

arguments = sys.argv[1:]
cmd = [compiler_path] + arguments
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

كما قال كريستوفيد إن قذيفة يزيل الاقتباسات.

لكن لا تحتاج إلى إنشاء السلسلة بنفسك عند استخدام Popen: يمكنه التعامل مع ذلك تلقائيا. يمكنك القيام بذلك بدلا من ذلك:

import sys, subprocess
process = subprocess.Popen(sys.argv[1:], executable=compiler_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

وحدة الفرعية نأمل أن تمر الحجج بشكل صحيح بالنسبة لك.

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