Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何捕获从python子进程运行的git clone命令的输出_Python_Git_Subprocess - Fatal编程技术网

如何捕获从python子进程运行的git clone命令的输出

如何捕获从python子进程运行的git clone命令的输出,python,git,subprocess,Python,Git,Subprocess,我正在尝试使用子流程运行git clone命令。请检查\u output(),以便我可以验证它是否成功克隆,但是否抛出错误 Command 'git clone <url>' returned non-zero exit status 128 命令“git clone”返回非零退出状态128 我正在做: resp = subprocess.check_output('git clone <url>', shell=True) resp=subprocess.chec

我正在尝试使用
子流程运行
git clone
命令。请检查\u output()
,以便我可以验证它是否成功克隆,但是否抛出错误

Command 'git clone <url>' returned non-zero exit status 128
命令“git clone”返回非零退出状态128
我正在做:

resp = subprocess.check_output('git clone <url>', shell=True)
resp=subprocess.check_输出('git clone',shell=True)
如何获取git clone的输出,以便验证它是否正常工作,并捕获任何错误(如果有)


谢谢

所以读取子流程输出的最佳方法是使用
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

如何运行git clone命令?像
proc=subprocess.Popen(['git','clone',url],stdout=subprocess.PIPE)
?然后,您可以使用
proc.stdout.read()
@FHTMitchell我正在使用子流程。请检查\u输出是否与Popen一起使用,但我会尝试并更新它。@FHTMitchell您能通过给出一个示例来回答问题吗谢谢。但是我得到了输出
b“克隆到'Project'…\n致命:我不处理协议'git clone https'\n“
这是git问题,不是python问题。您传递了什么url?但在没有python的终端上,相同的url工作正常:)听起来像是有一个非ascii字符