https://stackoverflow.com/questions/53822640/python-subprocess-shell-not-passing-yes-with-to-the-bash-script-im-executing

Hello I'm trying to execute a script via python. This script runs a toolset 
called review board tools based on the arguments passed into the script. 

When I run the command 

    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'

The shell gets caught because rbtools asks the users on update if they want 
to update the review requests when the update is run.

When I run this command exactly as is in my terminal minus the obfuscation 
for my credentials and actual information it succeeds and finishes the 
update with no issues. It pipes the yes | into the script and auto answers 
the yes prompt.

The execution only hangs in python.

The bash command review is a script I wrote to call review board tools I 
have tried putting the yes | in that script as well to no avail

    #!/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


My python code that executes the subprocess command is:

    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

I don't understand why when I execute this command from python the script 
hangs and gets stuck on the update, but when I run the exact command I 
print out in my python script and run it manually in terminal it doesn't 
hang and completes with no issue. 

I understand what's happening with the python as p.communicate is waiting 
for the process to exist. The weird part is I get an email and the review 
requests get updated but my script never continues. Thus, it would see as 
though the yes is being piped into the command and its running no issues, 
but python hangs like it didn't run or exit properly.

Unfortunately, rbtools doesn't have an auto yes function and thus I have to 
pipe the yes with a shell.

Any ideas on how to resolve this issue?

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"Review Board Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to