Выполнение команд git с использованием subprocess.Popen в python

1

Я пишу небольшой скрипт python, который должен выполнять команды git изнутри заданного каталога

Код выглядит следующим образом:

import subprocess, os

pr = subprocess.Popen(['/usr/bin/git', 'status'],                  
       cwd=os.path.dirname('/path/to/dir/'), 
       stdout=subprocess.PIPE, 
       stderr=subprocess.PIPE, 
       shell=True)
(out, error) = pr.communicate()
print out

Но это показывает использование git как выход.

Если команда не включает git, например. ['ls'] то он показывает правильный вывод.

Есть что-то, чего я не вижу?

версия python - 2.6.6

Благодарю.

Теги:
popen

2 ответа

7
Лучший ответ

subprocess.Popen:

В Unix с shell=True: [...] Если args - это последовательность, первый элемент указывает командную строку, и любые дополнительные элементы будут рассматриваться как дополнительные аргументы самой оболочки.

Вы не хотите, чтобы shell=True а также список аргументов. Установите shell=False.

  • 0
    Спасибо, это сработало. Я передал аргументы как строку. Но все равно пришлось установить shell=True . в противном случае возникает OSError: [Errno 2] No such file or directory
  • 0
    Безопаснее передавать переменные аргументы в виде списка, но если у вас есть фиксированная команда, отправлять ее через bash не повредит.
0

def bash_command (cmd):

s = subprocess.Popen(['/usr/bin/git', "status"], shell = False, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, cwd = "G:\x ").communicate() print s

Могу ли я сделать это на окнах

это не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню