Talvez o comando aws
bash esteja retornando caracteres não imprimíveis que você não vê com print()
. Tente removê-los com tr
:
FOLDER=$(./aws get $BUCKET"/location.txt" | tr -cd "[:print:]")
Por algum motivo, não posso passar a variável bash $FOLDER
como um argumento python no código a seguir. O script python faz o download de alguns arquivos do amazon s3.
Script de bash:
#!/bin/bash
FOLDER=$(./aws get $BUCKET"/location.txt")
python /data/pythonscript.py $FOLDER
#
A saída do $FOLDER
é uma data regenerada, por exemplo. 2014/07/31/14-16-34
, usado como caminho.
Aqui está o script python:
#!/usr/bin/python
import boto, sys
from boto.s3.connection import S3Connection
access_key = 'accesskey'
secret_key = 'secretkey'
bucket_name = 'a name'
folder_path = str(sys.argv[1]) if len(sys.argv) > 1 else ''
print("Forwarded folder path " + folder_path)
conn = S3Connection(access_key, secret_key)
bucket = conn.get_bucket(bucket_name)
print("Bucket Location:" + bucket.get_location())
for key in bucket.list(prefix=folder_path, delimiter=''):
if '.' in key.name:
file_name = key.name[len(folder_path)+1:]
print("Downloading file " + file_name)
key.get_contents_to_filename('/data/temp/' + file_name)
Quando executo o script bash sem alterar a linha python /data/pythonscript.py $FOLDER
, recebo a seguinte saída:
Forwarded folder path 2014/07/31/14-16-34
Buckect Location:
Mas quando eu mudo para python /data/pythonscript.py 2014/07/31/14-16-34
, tudo funciona:
Forwarded folder path 2014/07/31/14-16-34
Bucket Location:
Downloading 2014/07/31/14-16-34/FacetedSearch.zip
Downloading file FacetedSearch.zip
Downloading 2014/07/31/14-16-34/Location.zip
Downloading file Location.zip
Downloading 2014/07/31/14-16-34/LocationPage.zip
Downloading file LocationPage.zip
Tente colocar $FOLDER
entre aspas duplas:
python script.py "$FOLDER"
Altere a primeira linha do seu script para
#!/usr/bin/env python
Isso deve funcionar.
E seja mais claro em suas perguntas.
Como @drs disse que sua pergunta ainda está incompleta:
pythonscript
ou s3download
? bucket.get_location()
? Tags python amazon-s3 shell-script