我想以編程方式編寫調用boto3方法並更改方法內默認參數的方法。boto3方法參數的缺省值
例如,如果log設置爲True,我想使用我的日誌桶。否則,不要記錄它。像這樣:
def my_run(log=False):
log_string = "s3://mylogs" if log else None
result = emr.run_job_flow(Name = 'EMRTest1',
LogUri = log_string ,
...
)
return result
因此,對於默認值,我使用無。但是,boto3需要一個字符串。我嘗試使用空字符串作爲默認值,但它不是有效值
我知道如果我不指定logURI,它將不會被存儲。所以我可以這樣做if語句,像這樣:
def my_run(log=False):
if log:
result = emr.run_job_flow(Name = 'EMRTest1',
LogUri = "s3://mylogs" ,
...
)
else:
result = emr.run_job_flow(Name = 'EMRTest1',
...
)
return result
但這是可怕的方式。 LogUri只是一個例子。我希望能夠改變其他參數。我不能讓那些嵌套的ifs。
是否有像boto3中的字符串的各種類型的默認值,我可以使用?
編輯1
從下面的第一個評論, http://boto3.readthedocs.org/en/latest/guide/events.html#provide-client-params
有趣的API。雖然沒有很好的記錄。他們爲s3 clisnt的例子工作正常,
s3 = boto3.client('s3')
# Access the event system on the S3 client
event_system = s3.meta.events
# Create a function
def add_my_bucket(params, **kwargs):
print "Hello"
# Add the name of the bucket you want to default to.
if 'Bucket' not in params:
params['Bucket'] = 'mybucket'
# Register the function to an event
event_system.register('provide-client-params.s3.ListObjects', add_my_bucket)
response = s3.list_objects()
然後迴應是好的,我也看到「你好」打印。
但現在我儘量讓電子病歷的run_job_flow一個例子:
def my_run(name):
def setName(params, **kwargs):
print "Hello"
params['Name'] = name
current_emr = boto3.client('emr')
event_system = current_emr.meta.events
event_system.register('provide-client-params.emr.RunJobFlow', setName)
current_emr.run_job_flow(...)
當我跑,我得到: 缺少必需的參數輸入:「名稱」
我使用錯誤的語法不知何故? 我確實使用了從current_emr.meta.method_to_api_mapping得到的RunJobFlow 也許這不是emr的provide-client-params?
我還沒有看到「你好」印刷