例如,在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之间的管道?