簡體   English   中英

python從輸出中提取幾行

[英]python extract few lines from the output

我創建了一個python類來執行curl命令,該命令反過來會生成令牌。 代碼按預期工作,腳本生成預期的輸出,現在,從下面提到的輸出中不需要幾行,而不是整個輸出。

如何從輸出中提取以下行。

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

如何提取這些行。

    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()

整個輸出:

* 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

所需輸出:

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

不要使用os.popen和朋友去執行外部程序-使用subprocess該模塊:

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

以同樣的方式,不要僅僅為了從URL獲取cookie而執行子過程-您已經在代碼中導入了出色的requests庫,為什么不使用它呢!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM