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

Pattern matching and extracting data from a remote machine's output.

下面我连接到远程机器并读取 (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")

如果我理解正确你的 data 变量包含什么:

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

我用的是Python split的方法,先换行分割,再按_PASS分割,然后取第一个元素。