Оболочка подпроцесса не передает да с |к сценарию Bash я выполняю - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь выполнить скрипт через 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 не имеетФункция автоматического да и, следовательно, я должен передать «да» с помощью оболочки.

Любые идеи о том, как решить эту проблему?

...