Как выполнить команду VS2008 из Python и получить ее вывод? - PullRequest
4 голосов
/ 13 февраля 2010

Я хочу бежать

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" и сохранить его в строку БЕЗ первого перенаправления в файл. Я заметил, что когда я просто вызываю его из командной строки, я получаю GUI, когда набираю:

tf changeset 12345

и я получаю текстовый вывод, когда делаю:

tf changeset 12345 > out.txt

Я предпочитаю не создавать файл в файловой системе, но, надеюсь, просто прочитайте его «Pythonic way».

Я видел краткие примеры os.system (), подпроцесса, но ни один из них, кажется, не иллюстрирует, как делать то, что я хочу сделать:

  1. Запустить процесс из определенного каталога (желательно без использования chdir)
  2. Выполнение команды, содержащей переменные среды + пользовательский текст.
  3. Перенаправить вывод без создания временного файла.

Надеюсь, вы поможете мне приблизиться к тому, что я хочу. Это поможет, если вы протестировали решение на VS2008 или другой программе Windows.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 февраля 2010
process = subprocess.Popen(['tf', 'changeset', '12345'], cwd='c:/somedir', env={'SOMEENVVAR': 'SOMEVALUE', ...}, stdout=subprocess.PIPE)

for line in process.stdout:
  print line

process.terminate()
2 голосов
/ 13 февраля 2010

Посмотрите на этот код, который я использовал здесь , чтобы выполнить работу, которую вы ищете. Это написано на C # и является гибким классом, вам просто нужно изменить команду, посмотрите в ps.FileName и ps.Arguments, выходные данные команды перенаправляются в экземпляр StringBuilder для анализа, если это требуется. Команда, выполняющая оболочку в окне, полностью скрыта и не отображается.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...