[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