简体   繁体   中英

python extract few lines from the output

I've created a python class to execute a curl command which in turn generates a token. The code works as expected.The script generates the expected output.Now, need few lines from the below mentioned output and not the entire output.

How do I extract the following lines from the output.

lines starting after 
Set-Cookie: SESSION=   till  =;  

. How do I extract these lines.

    import requests
    import json
    from akamai.edgegrid import EdgeGridAuth, EdgeRc
    from tabulate import tabulate
    import os
    import re
    import base64

    class generate_token(object):

        """
          This library is to generate token for the test application

        """

        def __init__(self,kwargs):

            self.username     = 'user'
            self.password     = 'abcdef'
            self.contractName = kwargs.get("Names")
            self.contractType = kwargs.get("Type")
            self.accountId    = kwargs.get("Id")
            self.env          = kwargs.get("env")

        def requestSession(self):

             if self.env == "test":
               ping = os.popen('ping -c 1  hostname.com').read()
               ip_addr  = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b",ping)[0]

             else:
                ping = os.popen('ping -c 1  different_hostname.com').read()
                ip_addr = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b",ping)[0]

             url = "https://%s/EdgeAuth/asyncUserLogin" %(ip_addr)
             command = "curl -is -v  -k  -d username=%s -d password=%s --request POST '%s' " %(self.username,self.password,url)
             self.session = os.popen(command).read()


if __name__ == "__main__":
    initData = {
                'Names': 'names',
                'Type': 'type',
                'Id': 'ID',
                'env' : 'test'
                }

    c = generate_token(kwargs=initData)
    result = c.requestSession()

Entire output :

* TCP_NODELAY set
* WARNING: disabling hostname validation also disables SNI.
> POST /EdgeAuth/asyncUserLogin HTTP/1.1
> Host: 143.111.112.202
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 33
> Content-Type: application/x-www-form-urlencoded
>
} [33 bytes data]
* upload completely sent off: 33 out of 33 bytes
< HTTP/1.1 302 Moved Temporarily
< Date: Thu, 26 Jul 2018 15:54:07 GMT
< Server: Apache-Coyote/1.1
< Location: https://192.168.93.201/homeng/view/main
< Content-Length: 0
< Set-Cookie: SESSION=1-7FOmRFhEcci+8fAfh+DvLg==-1bk61eksykUHbWc9kx3LzL0KdkaxyDodxsEsu6siMR/1cpR7yLaD7HtTjXEr+XDowzpYcug4bfKIMjk2/T0aqJiHg5BrbRbnBeZnTcAUIpdyKGvtnmEQkSADoaxvgfYGrxqQctrVPdqJtPziqvIbjO1X8xh0Xtj/ZNvJXaSFs//w9ISNZ5hvIDBygUo+0EuYT8PSTYVPrcBCLaJUkC8ACg==-jdN937gosTsMx8fdaJqP5sA7wKPRgqv1RxRkX65SWeE=; 
Path=/; Secure
< Via: 1.1 %{HTTP_HOST}
< X-Content-Type-Options: nosniff
< Content-Type: text/plain

Required output :

17FOmRFhEcci+8fAfh+DvLg==-1bk61eksykUHbWc9kx3LzL0KdkaxyDodxsEsu6siMR/1cpR7yLaD7HtTjXEr+XDowzpYcug4bfKIMjk2/T0aqJiHg5BrbRbnBeZnTcAUIpdyKGvtnmEQkSADoaxvgfYGrxqQctrVPdqJtPziqvIbjO1X8xh0Xtj/ZNvJXaSFs//w9ISNZ5hvIDBygUo+0EuYT8PSTYVPrcBCLaJUkC8ACg==-jdN937gosTsMx8fdaJqP5sA7wKPRgqv1RxRkX65SWeE=;

Don't use os.popen and friends to execute external programs - use the subprocess module for that:

ping = subprocess.check_output(['ping', '-c', '1', 'hostname.com'])

In the same way, don't execute a subprocess just to get a cookie from a url - you're already importing the excellent requests library in your code, why not use it!

r = requests.post(url, data={'username': self.username, 'password': self.password})
print (r.cookies['SESSION'])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM