模式匹配和从远程机器的输出中提取数据。

时间:2015-09-15 22:23:46

标签: python linux

下面我连接到远程计算机并读取(cat)文件。输出是这样的:

AIMS_PASS=wreretet
ASAPMSTR_PASS=dfdgdg
CREP_PASS=gfhfh
DSS_PASS=dgfhhfh
ELS_PASS=Rdgdh
EXTAPI_PASS=qadgdbbc

我需要_PASS之前的单词,如AIMS,ASAPMSTR,CREP,..但这些是从远程服务器输出的。我知道如果数据是本地的,cut -d _ -f 1会起作用。如何在远程服务器的输出上应用此命令。特别是在if loop

pswd = re.compile(r'\w_PASS\W')
if conn is None:
            print machine +" " + "Successfully Authenticated\n"
            stdin, stdout, stderr = ssh.exec_command("""python -c 'import os; \
                                                    print os.path.isfile("/a/etc/portal/db/secrets/db.shared") \
                                                    '""")
            ret_val =  stdout.read()
            if ret_val:
                print "db.shared file is there!"
                stdin, stdout, stderr = ssh.exec_command("cat /a/etc/portal/db/secrets/db.shared")
                data = stdout.read()
                pswd_line = pswd.findall(data)
                if pswd_line:
                    print data
                    <SOMETHING WHICH JUST GIVES ME THE WORD BEFORE '_PASS'>
                    #stdin, stdout, stderr = ssh.exec_command("cut -d _ -f 1")
                    #print stdout.read()
                ssh.close()
                break
            else:
                stdin, stdout, stderr = ssh.exec_command("exit")

1 个答案:

答案 0 :(得分:1)

如果我理解了您的data变量的含义:

x = "AIMS_PASS=wreretet\nASAPMSTR_PASS=dfdgdg"
[line.split('_PASS')[0] for line in x.split('\n')]
>>> ['AIMS', 'ASAPMSTR']

我使用Python split方法首先按新行拆分,然后按_PASS拆分,然后取第一个元素。