كيفية تنفيذ أمر VS2008 من بايثون والحصول على مخرجاته؟
-
20-09-2019 - |
سؤال
أرغب في الركض
tf changeset 12345
باستخدام أداة الأوامر Visual Studio 2008.وهي تقع في: "c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
والأمر الذي يتم إطلاقه هو: %comspec% /k ""c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
أرغب في إلحاق "tf Changeset 12345" به بطريقة ما وحفظه في سلسلة دون إعادة توجيهه أولاً إلى ملف.لقد لاحظت أنه عندما أستدعيه ببساطة من سطر الأوامر، أحصل على واجهة المستخدم الرسومية عندما أكتب:
tf changeset 12345
وأحصل على الإخراج النصي عندما أفعل:
tf changeset 12345 > out.txt
أفضّل عدم إنشاء ملف على نظام الملفات، لكن آمل أن أقرأه فقط "بطريقة بايثونيك".
لقد رأيت أمثلة موجزة عن os.system()، والعملية الفرعية، ولكن لا يبدو أن أيًا منها يوضح كيفية القيام بما أريد القيام به:
- قم بتشغيل العملية من دليل معين (ويفضل أن يكون ذلك بدون استخدام chdir)
- تنفيذ أمر يحتوي على متغيرات البيئة + نص مخصص.
- إعادة توجيه الإخراج دون إنشاء ملف مؤقت.
آمل أن تتمكن من مساعدتي في الاقتراب مما أريد.سيكون من المفيد أن تقوم باختبار الحل على VS2008 أو بعض برامج Windows الأخرى.
شكرًا لك!
المحلول
process = subprocess.Popen(['tf', 'changeset', '12345'], cwd='c:/somedir', env={'SOMEENVVAR': 'SOMEVALUE', ...}, stdout=subprocess.PIPE)
for line in process.stdout:
print line
process.terminate()
نصائح أخرى
ألق نظرة على هذا الرمز الذي استخدمته هنا للقيام بالمهمة التي تبحث عنها.هذا مكتوب بلغة C#، وهو فئة مرنة، تحتاج فقط إلى تغيير الأمر، والبحث فيه ps.FileName
و ps.Arguments
, ، تتم إعادة توجيه إخراج الأمر إلى a StringBuilder
مثال للتحليل إذا لزم الأمر.أمر تنفيذ Shell في النافذة مخفي تمامًا ولا يظهر.
أتمنى أن يساعد هذا ، مع أطيب التحيات ، توم.