Если я хочу извлечь файл из терминала, я могу использовать AWS CLI следующим образом:
aws s3 cp s3://path/to/file/filename.tsv.gz - | zgrep 12345
Я хотел бы сделать это рекурсивно из сценария.Пока я делаю это
import boto3
s3_client = boto3.client('s3')
obj = s3_client.get_object(Bucket=bucket, Key=prefix + file_name)
body = obj['Body']
with gzip.open(body, 'rt') as gf:
for ln in gf:
if string in ln:
print(string)
Это прекрасно работает, но на самом деле это не очень быстро.Поэтому я бы хотел использовать zgrep.
Я пытался
import subprocess
cp = 'aws s3 cp s3://' + bucket + '/' + prefix + file_name + ' - | zgrep ' + string
result = subprocess.run(cp, check=True, shell=True, stdout=subprocess.PIPE)
print(result)
Но получить subprocess.CalledProcessError
в качестве команды returned non-zero exit status 1