Python: subprocess.Popen хранить вывод в списке списка - PullRequest
1 голос
/ 19 июня 2019

Я выполняю SQL-запрос в сценарии оболочки, который выполняется внутри сценария Python.Так как в prod env у меня нет библиотеки cx_Oracle, поэтому мне нужно использовать скрипт оболочки.Теперь, когда я вызываю скрипт оболочки, используя python, я получаю вывод в виде строки.Как я могу преобразовать этот вывод в список.Вы можете использовать command.getoutput или subprocess.Popen only.

#!/usr/bin/python
import re,os,commands,os.path
import subprocess

#output = commands.getoutput("sh FA_FMW.sh")
output = subprocess.Popen(["sh", "ABC.sh"],
                          stdout=subprocess.PIPE).communicate()[0]
print output

Вывод:

Successfully created: APPABC.env
ABCenv succeeded.

ABC_ACTIVITIES              ACTIVITIES
12.11.1.8.0                     VALID       N

ABC_BIA_CLOUD               ATBCITE
12.11.1.8.1                     VALID       Y

выше Я только что упомянул две строки вывода запроса, которые имеют 5 столбцов.Как я могу получить доступ к этой выходной строке и столбцу, чтобы выполнить определенную операцию с номером версии и допустимыми недопустимыми флагами.Также необходимо отфильтровать первые две строки сообщения об успехе.Например, мне нужно распечатать только первые два столбца каждой строки.Здесь две строки являются частью одной строки.

for i in range(0, len(output)):
        print output[i][0], output[i][2], output[i][4]

output:

ABC_ACTIVITIES 12.11.1.8.0 N
ABC_ACTIVITIES 12.11.1.8.1 Y

1 Ответ

1 голос
/ 19 июня 2019

Использование Regex.

Ex:

import re
output = """Successfully created: APPABC.env
ABCenv succeeded.

ABC_ACTIVITIES              ACTIVITIES
12.11.1.8.0                     VALID       N

ABC_BIA_CLOUD               ATBCITE
12.11.1.8.1                     VALID       Y"""

for chunk in re.findall(r"\n\b[A-Z_]+\b.*?\b[A-Z]\b", output, flags=re.MULTILINE|re.DOTALL):
    print chunk.split()[0::2]

Выход:

['ABC_ACTIVITIES', '12.11.1.8.0', 'N']
['ABC_BIA_CLOUD', '12.11.1.8.1', 'Y']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...