Я пытаюсь выполнить скрипт через Python.Этот сценарий запускает набор инструментов, называемый инструментами обзора, на основе аргументов, переданных в сценарий.
Когда я запускаю команду:
yes | bash review 'feature-signature' 'PR_Reviewers' 'myrepo' 'myuser' 'mypassword' 'update' 'development' 'PR user' 'PR summary https://myjira.atlassian.net/browse/NEB-4257' 'https://myjira.atlassian.net/browse/NEB-4257' 'PR description'
Оболочка перехватывается, потому что rbtools
спрашивает пользователейпри обновлении, если они хотят обновить запросы на проверку при запуске обновления.
Когда я запускаю эту команду точно так же, как в моем терминале, за исключением обфускации моих учетных данных и фактической информации, она завершается успешно и завершает обновление безпроблемы.Он передает yes |
в сценарий и автоматически отвечает на запрос yes.
Выполнение зависает только на Python.
Команда обзора bash - это сценарий, который я написал для вызова инструментов доски обзора.Я пытался вставить yes |
в этот скрипт, но безрезультатно.
#!/usr/bin/env bash
BRANCH_NAME=$1
REVIEWERS=$2
REPO=$3
rb_user=$4
rb_password=$5
action=$6
base_branch=$7
#added these options
submit_as=$8
summary=$9
jira_id=$10
desc=$11
echo "Jira Link: $jira_id"
echo "Desc: $desc"
echo "Repo: $repo"
echo "Submit as: $submit_as"
echo "Summary $summary"
echo "Branch name $BRANCH_NAME"
cd $REPO
git checkout $BRANCH_NAME
if [ "$action" == "post" ]; then
rbt post --repository=$REPO \
--tracking-branch="origin/$BRANCH_NAME" \
--parent="origin/$base_branch" \
--branch="$BRANCH_NAME" \
--guess-fields=auto \
--target-groups=$REVIEWERS \
--publish \
--server="http://reviews.domain" \
--username="$rb_user" \
--password=$rb_password \
--submit-as="$submit_as" \
--bugs-closed="$jira_id" \
--description="$summary" \
-d
else
yes | rbt post --update --repository=$REPO \
--tracking-branch="origin/$BRANCH_NAME" \
--parent="origin/$base_branch" \
--branch="$BRANCH_NAME" \
--guess-fields="auto" \
--target-groups="$REVIEWERS" \
--publish \
--server="http://reviews.domain" \
--username="$rb_user" \
--password="$rb_password" \
--submit-as="$submit_as" \
--bugs-closed="$jira_id" \
--description="$summary" \
-d
fi
cd ../
exit 0
Мой код Python, который выполняет команду подпроцесса:
def run_command(command):
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = p.communicate()
if err:
if "bash" in command:
return err
else:
print err
return out
Я не понимаю, почемукогда я выполняю эту команду из Python, скрипт зависает и застревает при обновлении, но когда я запускаю точную команду, я печатаю в своем скрипте Python и запускаю ее вручную в терминале, он не зависает и завершается без проблем.
Я понимаю, что происходит с Python, так как p.communicate
ждет, пока процесс будет существовать.Странная часть - я получаю электронное письмо, и запросы на рецензирование обновляются, но мой сценарий никогда не продолжается.Таким образом, можно было бы увидеть, как будто в команду передается yes и ее запуск не вызывает проблем, но Python зависает, как будто он не работает или не завершается должным образом.
К сожалению, rbtools
не имеетФункция автоматического да и, следовательно, я должен передать «да» с помощью оболочки.
Любые идеи о том, как решить эту проблему?