Я пытаюсь запустить команду 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, чтобы я мог убедиться, что он работает нормально или нет, и мог поймать любые ошибки, если таковые имеются.
Спасибо
@FHTMitchell Я использую subprocess.check_output не с Popen, но я попробую и обновлю.
@FHTMitchell Можете ли вы ответить на вопрос, приведя пример






Итак, лучший способ прочитать вывод подпроцесса - использовать 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
Спасибо. Но у меня на выходе получился b"Cloning into 'Project'...\nfatal: I don't handle protocol 'git clone https'\n"
Это проблема git, а не проблема питона. Какой URL вы передали?
Но тот же URL-адрес отлично работает на терминале без python :)
Как вы выполняете команду git clone? Нравится
proc = subprocess.Popen(['git', 'clone', url], stdout=subprocess.PIPE)? Тогда вы можете использоватьproc.stdout.read().