2016-12-06 2 views
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へ

+0

それが最初の反復で適切に働いていたように、2番目に失敗したに見えます。いくつかのアイテムに同じ既存キーがないことを提案する。 'item [" key "]' item.get( "key") 'を使って試してみましょう。これは、キーが存在しない場合は' None'を返すか、 'item.get(" key "、"キーが見つからない場合は必要です)」 – sytech

+0

投稿したコードは実行しているコードではありません( 'if'の後ろにインデントがありません)。また、 'wsclient'または少なくとも' workspaces'と 'item'が何であるかを知っていれば、私たちはもっと助けになるでしょう。 – hop

+0

これは、2回目の試行でLastKnownUserConnectionTimestampが空であるようです...このフィールドをチェックしないでコードを実行しようとしますか? –

答えて

0

おかげで - 作業コード:

#!/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.get("LastKnownUserConnectionTimestamp")) 

    if workspaces.has_key("NextToken"): 
     nextToken = workspaces["NextToken"] 
    else: 
     break 
関連する問題