Я совершенно не знаком с Python, поэтому, пожалуйста, извините за недостаток знаний. Я пишу скрипт для создания снимков AWS EC2, а затем удаляю любые старые снимки, указанные в скрипте. Я взял код из других сценариев, которые, как представляется, были написаны в более старой версии Python (я использую 3.3.2).Python, использующий сортировку с помощью функции, дает TypeError: date_compare() отсутствует 1 обязательный позиционный аргумент: ошибка
#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()
При использовании своего рода заказать снимки я вызываю функцию, чтобы сравнить даты, чтобы отработать что новейшие и самые старые снимки. При запуске snapshots.sort (ключ = date_compare) Я получаю следующее сообщение об ошибке:
snapshots.sort(key=date_compare)
TypeError: date_compare() missing 1 required positional argument: 'snap2'
Довольно уверен, что я делаю что-то очень простой, но неправильно было бы очень признателен за помощь, чтобы получить эту работу. Благодаря!
Спасибо, что я действительно работал над этим, используя функцию для преобразования cmp в ключ, выполнив это: из functools импортируйте моментальные копии cmp_to_key.sort (key = cmp_to_key (date_compare)), это сработало, но на основе того, что вы упомянули выше, я мог бы просто заменить key = на cmp = и это обеспечило бы тот же результат ?? – stickells
Я думаю, что просто изменение 'key' на' cmp' более стандартное, прямое. Можете ли вы поддержать и принять мой ответ? –
никаких проблем, ответ принят, только что создал мою учетную запись, поэтому мой представитель не позволяет мне голосовать. Благодаря!! – stickells