代码之家  ›  专栏  ›  技术社区  ›  e-info128

如何在Python3上获得git receive pack上的git操作?

  •  0
  • e-info128  · 技术社区  · 5 年前

    例如,在python 3上有一个简单的管道:

    processHandler = subprocess.Popen(
        [ 'git-receive-pack', '/tmp/repo.git' ],
        stdin=sys.stdin,
        stdout=sys.stdout
    )
    processHandler.communicate()
    processHandler.wait()
    

    python脚本取代了原来的脚本 git-receive-pack 命令(来自ssh)和python脚本调用 git接收包 用一根简单的管子。这很好,但是,需要检测提交数据,例如:分支、操作(提交、合并等)。

    通信并不总是用换行符分开,数据传输可以以两种方式进行,因此我不能花一段时间获取整个请求,然后将其发送到命令的执行,因为可能有多个请求和多个应答,所以需要使用管道。

    有两个问题:1。我不知道在客户端和服务器应用程序之间传输的明文协议,所以我不知道如何创建一个接受这些值的正则表达式。2.如果我重定向,我无法截获流程的输入和输出数据,因为同一系统的管道已建立 stdout 然后它将无法向客户端发送响应字节。

    我怎样才能拦截 sys.stdin sys.stdout 不影响python和git之间的管道?

    0 回复  |  直到 5 年前