123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import os
- class MoveFileCommand(object):
- def __init__(self, src, dest):
- self.src = src
- self.dest = dest
- def execute(self):
- print('renaming {} to {}'.format(self.src, self.dest))
- os.rename(self.src, self.dest)
- def undo(self):
- print('renaming {} to {}'.format(self.dest, self.src))
- os.rename(self.dest, self.src)
- def main():
- command_stack = []
- # commands are just pushed into the command stack
- command_stack.append(MoveFileCommand('foo.txt', 'bar.txt'))
- command_stack.append(MoveFileCommand('bar.txt', 'baz.txt'))
- # they can be executed later on
- for cmd in command_stack:
- cmd.execute()
- # and can also be undone at will
- for cmd in reversed(command_stack):
- cmd.undo()
- if __name__ == "__main__":
- main()
- ### OUTPUT ###
- # renaming foo.txt to bar.txt
- # renaming bar.txt to baz.txt
- # renaming baz.txt to bar.txt
- # renaming bar.txt to foo.txt
|