【发布时间】:2015-10-09 13:58:24
【问题描述】:
我想通过 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 使用的打印输出——本质上是告诉我输入命令是错误的。
我看到了一个类似的问题exists here,但它只告诉我使用shell=True,这并没有解决我的问题。
我也尝试连续运行这两个命令,但这给了我与以前相同的输出。不过,我可能在这一步中遗漏了一些东西。
感谢任何帮助或提示。
【问题讨论】:
-
您为什么要尝试使用 shell=True 并传递参数列表?还有为什么 git 在一个单独的列表中?`
-
链接问题中的答案说使用反引号仅适用于 shell=True。它们在单独的列表中没有特别的原因,我会编辑以避免混淆。
-
您应该使用带有 shell=True 的字符串或删除 shell=True 并传递单个参数列表
-
谢谢,这就是答案。我一定在文档中错过了这个。
-
请注意,Bash 中不推荐使用反引号:
$(cmd)语法不太容易被误读,如有必要,您可以嵌套它。请参阅BashFAQ/082“为什么 $(...) 优于(反引号)?”在 BashGuide 中了解更多详细信息。此外,反引号在 SO cmets 中写起来很痛苦。 :)
标签: python git bash subprocess popen