我希望通过一个Python脚本来运行这个Git命令,并获取它的输出:
git diff --name-only mybranch `git merge-base mybranch develop`
这个命令的目的是查看自上次与develop合并以来,mybranch分支发生了哪些更改。
为了实现这一目的,我使用了subprocess.Popen命令:
output = subprocess.Popen(["git", "diff", "--name-only", "mybranch", "`git merge-base mybranch develop`"], stdout=subprocess.PIPE, shell=True)
然而,这并不起作用。变量
output.communicate()[0]
只是给我一个git使用的输出 -- 实际上告诉我输入的命令是错误的。我看到类似的问题在这里,但它只告诉我要使用
shell=True
,这并没有解决我的问题。我也尝试连续运行这两个命令,但是那给了我和之前一样的输出。虽然在这一步中,我可能漏掉了某些东西。
任何帮助或提示都将不胜感激。
$(cmd)
语法不容易被误读,并且如果需要,您可以嵌套它。有关更多详细信息,请参见BashGuide中的BashFAQ/082“为什么$(...)比(backticks)更受欢迎?” 此外,在SO评论中编写反引号很麻烦。 :) - PM 2Ringsubprocess.Popen()
调用来调用git merge-base
并收集其输出以供后续调用使用;这就是你的其他命令正在做的事情,只是告诉shell创建运行第二个调用的子进程。自己完成比让shell代劳更有效率。(如果这是一个Web服务,并且mybranch
来自不受信任的来源,出于安全原因,你也应该这样做;Shell注入可不是闹着玩的)。 - Charles Duffy