调用git命令的python子进程

2024-04-26 04:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个git命令从日志历史中获取一个ID,然后尝试通过管道进入另一个命令。第一个很好,但其他的都不行。 这是我的密码:

import subprocess as sb

commit_id = sb.Popen(['git', 'merge-base' ,'FETCH_HEAD', 'HEAD'], stdout=sb.PIPE)
test=commit_id.communicate()[0]
print(test)
sb.Popen(['git' , 'diff' ,'--name-status' ,test, 'HEAD'])

它打印b'0bf694cea03670b318eeef8369dc0a0e0c761b29\n',然后给出一个错误

以下是我得到的错误:

fatal: ambiguous argument '0bf694cea03670b318eeef8369dc0a0e0c761b29
': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

我不确定我会错在哪里

下面是我试图实现的git命令。它们在Linux命令行中工作正常:

git merge-base FETCH_HEAD HEAD /this returns the commit id
git diff --name-status commit_id HEAD /this returns changed files
git diff --src-prefix 'Original:' --dst-prefix 'New:' commit_id filename /this returns lines changed in files

Tags: nametestgit命令idbasedifffetch
2条回答

似乎新线不对,请尝试:

sb.Popen(['git' , 'diff' ,' name-status' ,test.strip(), 'HEAD'])

您的测试变量有一个尾随的换行符,去掉它,它就会正常工作

import subprocess as sb

commit_id = sb.Popen(['git', 'merge-base' ,'FETCH_HEAD', 'HEAD'], stdout=sb.PIPE)
test=commit_id.communicate()[0]
print(test)
sb.Popen(['git' , 'diff' ,' name-status' ,test[:-1], 'HEAD'])

相关问题 更多 >

    热门问题