Je suis complètement nouveau à Python alors s'il vous plaît excusez mon manque de connaissances. J'écris un script pour créer des snapshots AWS EC2, puis supprimer tous les instantanés plus anciens spécifiés dans le script. J'ai pris du code d'autres scripts qui semblent avoir été écrits dans une ancienne version de Python (j'utilise 3.3.2).Python en utilisant trier avec fonction donne TypeError: date_compare() manquant 1 requis positional argument: erreur
#Built with Python 3.3.2
import boto.ec2
from boto.ec2.connection import EC2Connection
from boto.ec2.regioninfo import RegionInfo
from boto.ec2.snapshot import Snapshot
from datetime import datetime
import sys
aws_access_key = str(input("AWS Access Key: "))
aws_secret_key = str(input("AWS Secret Key: "))
regionname = str(input("AWS Region Name: "))
regionendpoint = str(input("AWS Region Endpoint: "))
region = RegionInfo(name=regionname, endpoint=regionendpoint)
conn = EC2Connection(aws_access_key_id = aws_access_key, aws_secret_access_key = aws_secret_key, region = region)
print (conn)
volumes = conn.get_all_volumes()
print ("%s" % repr(volumes))
vol_id = str(input("Enter Volume ID to snapshot: "))
keep = int(input("Enter number of snapshots to keep: "))
volume = volumes[0]
description = str(input("Enter volume snapshot description: "))
if volume.create_snapshot(description):
print ('Snapshot created with description: %s' % description)
snapshots = volume.snapshots()
print (snapshots)
def date_compare(snap1, snap2):
if snap1.start_time < snap2.start_time:
return -1
elif snap1.start_time == snap2.start_time:
return 0
return 1
snapshots.sort(key=date_compare)
delta = len(snapshots) - keep
for i in range(delta):
print ('Deleting snapshot ') + snapshots[i].description
snapshots[i].delete()
Lorsque vous utilisez tri pour commander les clichés que je fais appel une fonction de comparer les dates pour travailler sur ce qui est le plus récent et les plus anciens clichés. Lorsque snapshots.sort (key = date_compare) fonctionne, je reçois l'erreur suivante:
snapshots.sort(key=date_compare)
TypeError: date_compare() missing 1 required positional argument: 'snap2'
assez sûr que je suis en train de faire quelque chose de mal, mais très basique apprécierais vraiment un peu d'aide pour obtenir ce travail. Merci!
Merci J'ai effectivement travaillé autour de cela en utilisant une fonction pour convertir cmp en clé en faisant ceci: à partir de functools importer des snapshots cmp_to_key.sort (clé = cmp_to_key (date_compare)) cela a fonctionné mais basé sur ce que vous avez mentionné ci-dessus, je pourrais juste remplacer key = avec cmp = et qui permettrait d'atteindre le même résultat ?? – stickells
Je pense que le simple changement de 'key' en' cmp' est plus standard, plus simple. Pouvez-vous upvote et accepter ma réponse? –
pas de problèmes, réponse acceptée, seulement créé mon compte afin que mon représentant ne me permet pas de voter pour le moment. Merci!! – stickells