كيفية تنفيذ أمر VS2008 من بايثون والحصول على مخرجاته؟

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

سؤال

أرغب في الركض

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()، والعملية الفرعية، ولكن لا يبدو أن أيًا منها يوضح كيفية القيام بما أريد القيام به:

  1. قم بتشغيل العملية من دليل معين (ويفضل أن يكون ذلك بدون استخدام chdir)
  2. تنفيذ أمر يحتوي على متغيرات البيئة + نص مخصص.
  3. إعادة توجيه الإخراج دون إنشاء ملف مؤقت.

آمل أن تتمكن من مساعدتي في الاقتراب مما أريد.سيكون من المفيد أن تقوم باختبار الحل على 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 في النافذة مخفي تمامًا ولا يظهر.

أتمنى أن يساعد هذا ، مع أطيب التحيات ، توم.

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