Я пытаюсь получить список всех веток, доступных в моем репозитории, с помощью Python с помощью этого кода:
import subprocess
branches = ["All"]
command = "git branch -r"
branch_list = subprocess.check_output(command)
for branch in branch_list:
print branch
branches.append[branch]
Я хочу иметь что-то вроде:
print branches[0] # is "All"
print branches[1] # is "branch1"
print branches[2] # is "branch2"
etc etc
но вместо этого у меня
print branches[0] # is "All"
print branches[1] # is "b"
print branches[2] # is "r"
print branches[3] # is "a"
print branches[4] # is "n"
print branches[5] # is "c"
print branches[6] # is "h"
etc etc
Спасибо за ваше время и вашу помощь
не называйте свою переменную list
— person MagicaNexus schedule 05.07.2019
^ В общем, воздержитесь от использования зарезервированных ключевых слов и встроенных функций в качестве имен переменных, так как это приведет к перезаписи встроенной функции вашим значением, нарушая код, который ожидает, что встроенная функция будет тем, чем она является на самом деле. — person MagicaNexus schedule 05.07.2019
Я знаю, что это просто для примера — person MagicaNexus schedule 05.07.2019
subprocess.check_output возвращает (многострочную) строку. Итерации по строке дают вам буквы … — person MagicaNexus schedule 05.07.2019
Заглянув в
check_output
документацию, мы Получаем обратно кучу байтов. Чтобы с ним было легче работать, мы можем его расшифровать. Затем, посколькуgit branch -r
выводит одну ветвь на строку, разделите строку на новые строки:НО я думаю, что есть еще более простой способ сделать это. Каждый отдельный объект в git соответствует некоторому файлу в каталоге
.git
. В этом случае вы можете найти свой список веток в.git/refs/heads
:РЕДАКТИРОВАТЬ (2020/10/13): Я провел еще некоторое время с
subprocess
с момента написания этого ответа и хотел указать на вариантtext
(черезsubprocess.run
):Это означает, что вы можете записать выражение
check_output
как:оставив кодирование и декодирование системе. Как вам больше нравится!
Ваше решение отлично работает для меня, добавление
.decode().split('\n')
было хорошим способом сделать, большое спасибо от новичка в python;) — person MagicaNexus; 05.07.2019Для вашего второго решения я работаю с репозиторием mutilple, поэтому мне нужно
--git-dir=
и--work-tree=
, чтобы менять репо, когда я хочу, но спасибо за совет — person MagicaNexus; 05.07.2019Каждый отдельный объект в git соответствует некоторому файлу в каталоге
.git
false. ссылки и объекты могут быть упакованы, — person MagicaNexus; 13.10.2020Попробуйте
decode
это:выход:
Для python3,
Для python2 замените
subprocess
наcommands
.