python подпроцесс для вызова git команд - PullRequest
1 голос
/ 20 марта 2020

Я использую команду git, чтобы получить идентификатор из истории журнала, а затем пытаюсь перейти в другую команду. Первый работает нормально, а все остальное - нет. Вот мой код:

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

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Кажется, что новая строка не верна, попробуйте:

sb.Popen(['git' , 'diff' ,'--name-status' ,test.strip(), 'HEAD'])
0 голосов
/ 20 марта 2020

В вашей тестовой переменной есть завершающий символ новой строки, уберите его, и он будет работать нормально

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'])
...