[Tutor] Issue in using "subprocess.Popen" for parsing the command output

srinivasan srinivasan.rns at gmail.com
Sun Nov 25 12:58:43 EST 2018


Even only with "*proc.decode("utf-8")"* in the above code still it seems to
throw the error

    #return proc.strip().decode("utf-8")
    #return proc.decode("utf-8").strip()
*    return proc.decode("utf-8")*

Error:
/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/venv/bin/python
/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py
printing stdout!!!!!!!!!!
printing retcode!!!!!!!!!! 0
Traceback (most recent call last):
  File
"/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py",
line 31, in <module>
    main("Apartment 18", "40672958689850014685")
*  File
"/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py",
line 29, in main*
*    return proc.decode("utf-8")*
*AttributeError: 'Popen' object has no attribute 'decode'*

Process finished with exit code 1


On Sun, Nov 25, 2018 at 11:24 PM srinivasan <srinivasan.rns at gmail.com>
wrote:

> Hope now I have changed on the string output as below, could you please
> correct me if am still wrong?
>
> import sys
> import subprocess
>
> interface = "wlan0"
>
>
> def main(ssid, pw):
>
>     try:
>         cmd = "nmcli device wifi connect '%s' password '%s'" % (ssid, pw)
>
>         proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
> stderr=subprocess.PIPE, shell=True, universal_newlines=True)
>         stdout, stderr = proc.communicate()
>         retcode = proc.returncode
>
>         print("printing stdout!!!!!!!!!!", stdout)
>         print("printing retcode!!!!!!!!!!", retcode)
>
>     except subprocess.CalledProcessError as e:
>         s = """While executing '{}' something went wrong.
>                         Return code == '{}'
>                         Return output:\n'{}'
>                         """.format(cmd, e.returncode, e.output, shell=True)
>         raise AssertionError(s)
>
>     #return proc.strip().decode("utf-8")
> *    return proc.decode("utf-8").strip()*
>
> main("Apartment 18", "40672958689850014685ad")
>
> Error:
>
> /home/srinivasan/Downloads/wifidisconnectissuenov23_homework/venv/bin/python
> /home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py
> Traceback (most recent call last):
>   File
> "/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py",
> line 30, in <module>
>     main("Apartment 18", "40672958689850014685")
> *  File
> "/home/srinivasan/Downloads/wifidisconnectissuenov23_homework/qa/test_library/test4.py",
> line 28, in main*
> *    return proc.decode("utf-8").strip()*
> *AttributeError: 'Popen' object has no attribute 'decode'*
> printing stdout!!!!!!!!!!
> printing retcode!!!!!!!!!! 0
>
> Process finished with exit code 1
>
>
>
> On Sun, Nov 25, 2018 at 11:19 PM MRAB <python at mrabarnett.plus.com> wrote:
>
>> On 2018-11-25 17:13, srinivasan wrote:
>> > Dear Python Experts Team,
>> >
>> > As am newbie still learning the python syntax from past 2 weeks, Excuse
>> me,
>> > If this might be silly question, As I am trying to execute shell command
>> > (ie, nmcli) using "subprocess.Popen".
>> >
>> > 1. Am trying to improve the below code with "try" and "exception", could
>> > you please help me how "try" and "exception" can be used on the below
>> code
>> > snippet. I hope in my code with try and exception, seems to be a bug.
>> >
>> > 2. As I am trying to execute shell commands using "subprocess.Popen", I
>> am
>> > trying to parse the strings output by "cmd = "nmcli device wifi connect
>> > '%s' password '%s'" % (ssid, pw)" command as below, but it is throwing
>> the
>> > below error as shown in "Output error logs:"
>> >
>> >   Could you please let me to fix the bug in the below code snippet,
>> where I
>> > need the collect the strings of the command output and later how to be
>> > parsed after execution of the command for example, I need to parse the
>> > string "Connection activation failed: " and compare it with the command
>> > output, could you please help me how this can be achieved?
>> >
>> > *Command:*
>> > :~$ nmcli device wifi connect 'Apartment 18' password
>> > '40672958689850014685abcdf'
>> > Error: Connection activation failed: (7) Secrets were required, but not
>> > provided.
>> > :~$
>> >
>> > *Code:*
>> > *import sys*
>> > *import subprocess*
>> >
>> > *interface = "wlan0"*
>> >
>> >
>> > *def main(ssid, pw):*
>> >
>> > *    # cmd = "nmcli device wifi connect '%s' password '%s'" % (ssid,
>> pw)*
>> > *    #*
>> > *    # proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
>> > stderr=subprocess.PIPE, shell=True,  universal_newlines=True)*
>> > *    # stdout, stderr = proc.communicate()*
>> > *    # retcode = proc.returncode*
>> > *    #*
>> > *    # print("printing stdout!!!!!!!!!!", stdout)*
>> > *    # print("printing retcode!!!!!!!!!!", retcode)*
>> >
>> > *    try:*
>> > *        cmd = "nmcli device wifi connect '%s' password '%s'" % (ssid,
>> pw)*
>> >
>> > *        proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
>> > stderr=subprocess.PIPE, shell=True, universal_newlines=True)*
>> > *        stdout, stderr = proc.communicate()*
>> > *        retcode = proc.returncode*
>> >
>> > *        print("printing stdout!!!!!!!!!!", stdout)*
>> > *        print("printing retcode!!!!!!!!!!", retcode)*
>> >
>> > *    except subprocess.CalledProcessError as e:*
>> > *        s = """While executing '{}' something went wrong.*
>> > *                        Return code == '{}'*
>> > *                        Return output:\n'{}'*
>> > *                        """.format(cmd, e.returncode, e.output,
>> > shell=enable_shell)*
>> > *        raise AssertionError(s)*
>> >
>> > *    return proc.strip().decode("utf-8")*
>> >
>> > *main("Apartment 18", "40672958689850014685")*
>> >
>> > *Output error logs:*
>> >
>> > /home/srinivasan/Downloads/wifidisconnectissuenov23/qa/venv/bin/python
>> >
>> /home/srinivasan/Downloads/wifidisconnectissuenov23/qa/test_library/test4.py
>> > Traceback (most recent call last):
>> >    File
>> >
>> "/home/srinivasan/Downloads/wifidisconnectissuenov23/qa/test_library/test4.py",
>> > line 38, in <module>
>> > printing stdout!!!!!!!!!!
>> > printing retcode!!!!!!!!!! 0
>> >      main("Apartment 18", "40672958689850014685")
>> >    File
>> >
>> "/home/srinivasan/Downloads/wifidisconnectissuenov23/qa/test_library/test4.py",
>> > line 36, in main
>> >      return proc.strip().decode("utf-8")
>> > AttributeError: 'Popen' object has no attribute 'strip'
>> >
>> > Process finished with exit code 1
>> >
>> > Kindly do the needful as am stuck with this issue from 2 days
>> >
>> > Many Thanks in advance,
>> >
>> Look carefully at the traceback. It's actually telling you what the
>> problem is.
>>
>> You're trying to do .strip() on proc, but proc is the process itself.
>>
>> Instead, what you want is to do .strip() on the string that it output.
>> --
>> https://mail.python.org/mailman/listinfo/python-list
>>
>


More information about the Tutor mailing list