$FOLDER
由于某种原因,我无法在以下代码中将bash 变量作为 python 参数传递。 python 脚本从 amazon s3 下载一些文件。
重击脚本:
#!/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)
当我执行 bash 脚本而不更改行时python /data/pythonscript.py $FOLDER
,我得到以下输出:
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
答案1
也许aws
bash 命令返回了您在 .txt 中看不到的不可打印字符print()
。尝试使用以下命令删除它们tr
:
FOLDER=$(./aws get $BUCKET"/location.txt" | tr -cd "[:print:]")
答案2
尝试放入$FOLDER
双引号:
python script.py "$FOLDER"
将脚本的第一行更改为
#!/usr/bin/env python
这应该有效。
并且更清楚地回答你的问题。
作为@drs说,你的问题仍然不完整:
- 您的示例仍然模糊且存在缺陷,例如您的脚本的正确名称是什么,是
pythonscript
还是s3download
? - “按预期工作”是否应该具有空白值
bucket.get_location()
?