何らかの理由で、bash変数$FOLDER
を次のコードのpython引数として渡すことができません。pythonスクリプトは、Amazon s3からいくつかのファイルをダウンロードします。
Bashスクリプト:
#!/bin/bash
FOLDER=$(./aws get $BUCKET"/location.txt")
python /data/pythonscript.py $FOLDER
#
$FOLDER
の出力は再生成された日付です。パスとして使用される2014/07/31/14-16-34
。
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)
python /data/pythonscript.py $FOLDER
行を変更せずにbashスクリプトを実行すると、次の出力が得られます。
Forwarded folder path 2014/07/31/14-16-34
Buckect Location:
しかし、それをpython /data/pythonscript.py 2014/07/31/14-16-34
に変更すると、すべてが機能します。
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
おそらく、aws
bashコマンドは、print()
では表示されない印刷不可能な文字を返しています。 tr
で削除してみてください:
FOLDER=$(./aws get $BUCKET"/location.txt" | tr -cd "[:print:]")
_$FOLDER
_を二重引用符で囲みます。
_python script.py "$FOLDER"
_
スクリプトの最初の行を次のように変更します
_#!/usr/bin/env python
_
これはうまくいくはずです。
そして、あなたの質問をより明確にしてください。
@ drs が言ったように、あなたの質問はまだ不完全です:
pythonscript
または_s3download
_ですか?bucket.get_location()
の値が空白になっているはずですが、「期待どおりに機能しますか」?