本质上,我正在尝试使用子进程调用来检出特定 sha 哈希的 git 提交。
但是,我不断收到错误 subprocess.CalledProcessError: Command '['git', 'checkout', '62bbce43e']' returned non-zero exit status 128.
这是我的代码如下:
with open(filename) as inputfile:
reader = csv.reader(inputfile, delimiter=",")
linecount = 0
for row in reader:
if linecount == 0:
linecount += 1
else:
repo = str(row[0])
sha = str(row[2])
specificfile = str(row[3])
linenum = int(row[4])
cl("cd", repo)
subprocess.check_output(['git', 'checkout', sha])
print("checkout done")
git("checkout", "-")
原文由 paulo 发布,翻译遵循 CC BY-SA 4.0 许可协议
subprocess.check_output()
调用实际上返回输出(您也可以通过传递stderr
参数来获得错误输出)。你可能想看看它是否给你一个错误来解释发生的事情。由于您遇到异常(意味着调用未完成,因此可能不会返回输出),您应该能够从异常成员之一获取输出:
我 知道的一件事是一些
git
如果您实际上 不在 Git 存储库中,命令往往会返回 128。因此,我将查看您的cl("cd", repo)
行之后的路径,其中:如果你的那个
cd
在 子进程中运行, 那 不会 影响当前进程,因此你可能根本不一定在 Git 存储库中。这肯定会解释128
返回码。例如,以下记录显示了当我尝试在存储库之外运行
git
命令时发生的情况:如果发现你 在 错误的目录中(即
cl("cd", repo)
语句正在运行一个子进程来更改目录),你应该使用 Python-blessed 方法来更改目录(a) :这实际上更改了 直接 进程(Python 解释器)的目录,而不是临时子进程。
(a)这实际上是一般的好建议——尽可能多地使用特定于 Python 的东西(因为它主要是跨平台的)而不是产生一个子 shell(它本质上是特定于平台的)。