awk с переменной в питоне - PullRequest
0 голосов
/ 20 декабря 2018

Допустим, у меня есть эта команда в python

response = requests.get('https://host/api/v13/clusters/cluster/services/impalaQueries', verify=false, auth=('user', pass))

У которой есть примеры данных, подобные этому:

 "queryId" : "8f46683f7c2c8fee:6504618f00000000",
"queryState" : "FINISHED",
"rowsProduced" : null,
 etc....

Как я могу использовать awk с моей переменной ответа?Например, awk -F ':' '/ queryId /

1 Ответ

0 голосов
/ 20 декабря 2018

Первое: если ваши данные в формате JSON (и в большинстве случаев это не так), не надо.

awk не может точно проанализировать JSON - вот и всеПоэтому специализированные инструменты, такие как jsawk, были написаны как альтернативы.Аналогичным образом, Python поставляется с совместимым парсером CSV, несколькими XML-парсерами, совместимыми с , и другими инструментами, которые будут лучше справляться со стандартизованными форматами, чем все, что было свернуто вручную в awk.

Для вашего конкретного случая использования модуль requests даже вызовет для вас анализатор JSON Python, если вы спросите:

queryId = requests.get('https://host/api/v13/clusters/cluster/services/impalaQueries',
                       verify=false, auth=('user', pass)).json()['queryId'] 

Второе: если вы действительно захотитеinvoke awk, используйте модуль subprocess.

response = '''
ignore this line
queryId foo
ignore this line also
'''

from subprocess import Popen, PIPE
p = Popen(['awk', '-F:', '/queryId/'], stdin=PIPE, stdout=PIPE)
(output, _) = p.communicate(response)

print(output)

... правильно выбрасывает только:

queryId foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...