0
私はコーディングとPythonにはとても新しいです。基本的に各AWSワークスペース(VDIマシン)に対して、私はワークスペース名とそれがログオンした最後の時刻を返そうとしています。これらのメトリックは 'describe_workspaces_connection_status'を使って簡単に利用できます。Python - for datetimeオブジェクトを文字列として渡すときにforループが失敗する
最初は失敗しました:私は、文字列ので、追加列str()としてdatetimeオブジェクトを渡すために必要な実現いくつかのグーグル後
Calling DescribeWorkspaces()
Traceback (most recent call last):
File "./ws-conectionTS.py", line 20, in <module>
print "Workspace name " + item["WorkspaceId"] + " last connected on : " + item["LastKnownUserConnectionTimestamp"]
TypeError: coercing to Unicode: need string or buffer, datetime.datetime found
:
print "Workspace name " + item["WorkspaceId"] + " last connected on : " + str(item["LastKnownUserConnectionTimestamp"])
今、私が実行したとき最初のワークスペースのデータを返しますが、エラーが発生します。
Calling DescribeWorkspaces()
Workspace name ws-qaazwssx last connected on : 2016-12-05 17:27:40.617000+00:00
Traceback (most recent call last):
File "./ws-conectionTS.py", line 20, in <module>
print "Workspace name " + item["WorkspaceId"] + " last connected on : " + str(item["LastKnownUserConnectionTimestamp"])
KeyError: 'LastKnownUserConnectionTimestamp'
どのようにコードを変更してループの各項目のデータを返すことができるのですか? 相続人は完全なコードは:
#!/usr/bin/python
import boto3
import datetime
import time
wsclient = boto3.client('workspaces')
nextToken = ""
while 1:
if nextToken == "":
print "Calling DescribeWorkspaces()"
workspaces = wsclient.describe_workspaces_connection_status()
else:
print "Calling DescribeWorkspaces(NextToken=" + nextToken + ")"
workspaces = wsclient.describe_workspaces_connection_status(NextToken=nextToken)
for item in workspaces["WorkspacesConnectionStatus"]:
print "Workspace name " + item["WorkspaceId"] + " last connected on : " + str(item["LastKnownUserConnectionTimestamp"])
if workspaces.has_key("NextToken"):
nextToken = workspaces["NextToken"]
else:
break
'describe_workspaces_connection_status' からの応答は次のとおりです。
{
'WorkspacesConnectionStatus': [
{
'WorkspaceId': 'string',
'ConnectionState': 'CONNECTED'|'DISCONNECTED'|'UNKNOWN',
'ConnectionStateCheckTimestamp': datetime(2015, 1, 1),
'LastKnownUserConnectionTimestamp': datetime(2015, 1, 1)
},
],
'NextToken': 'string'
}
多くの感謝!答えをsytechへ
それが最初の反復で適切に働いていたように、2番目に失敗したに見えます。いくつかのアイテムに同じ既存キーがないことを提案する。 'item [" key "]' item.get( "key") 'を使って試してみましょう。これは、キーが存在しない場合は' None'を返すか、 'item.get(" key "、"キーが見つからない場合は必要です)」 – sytech
投稿したコードは実行しているコードではありません( 'if'の後ろにインデントがありません)。また、 'wsclient'または少なくとも' workspaces'と 'item'が何であるかを知っていれば、私たちはもっと助けになるでしょう。 – hop
これは、2回目の試行でLastKnownUserConnectionTimestampが空であるようです...このフィールドをチェックしないでコードを実行しようとしますか? –