Как перехватить вывод команды git clone, запущенной из подпроцесса python

1

Я пытаюсь запустить команду git clone используя subprocess.check_output() чтобы я мог проверить, успешно ли она клонирует или нет, но ее ошибка бросания.

Command 'git clone <url>' returned non-zero exit status 128

Я делаю:

resp = subprocess.check_output('git clone <url>', shell=True)

Как я могу получить вывод git clone, чтобы я мог проверить, что он работает нормально или нет, и может поймать любые ошибки, если таковые имеются.

Спасибо

  • 0
    Как вы управляете командой git clone? Как proc = subprocess.Popen(['git', 'clone', url], stdout=subprocess.PIPE) ? Тогда вы можете использовать proc.stdout.read() .
  • 0
    @FHTMitchell Я использую subprocess.check_output не с Popen, но я попробую и обновлю.
Показать ещё 1 комментарий
Теги:
subprocess

1 ответ

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

Таким образом, лучшим способом для чтения вывода подпроцесса является использование subprocess.PIPE. Например

import subprocess
from collections import namedtuple

def git_clone(url):
    process = subprocess.Popen(['git', 'clone', url], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return namedtuple('Std', 'out, err')(process.stdout.read(), process.stderr.read())

# test on fake url
out, err = git_clone('http://fake.url')
print('out = {}\nerr = {}'.format(out, err)

выходы:

out = b''
err = b"Cloning into 'fake.url'...\nfatal: unable to access 'http://fake.url/': Couldn't resolve host 'fake.url'\n"

Следовательно, вы можете проверить успех, изменив функцию, которая будет

from warnings import warn

def git_clone(url):

    process = subprocess.Popen(['git', 'clone', url], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    if not process.stdout.read():
        warn(process.stderr.read())
        return False

    return True
  • 0
    Благодарю. Но я получил вывод b"Cloning into 'Project'...\nfatal: I don't handle protocol 'git clone https'\n"
  • 0
    Это проблема Git, а не проблема Python. Какой URL вы передали?
Показать ещё 2 комментария

Ещё вопросы

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