diff --git a/Lib/shutil.py b/Lib/shutil/__init__.py similarity index 96% rename from Lib/shutil.py rename to Lib/shutil/__init__.py index 510ae8c6f22d59..f41e4474654b61 100644 --- a/Lib/shutil.py +++ b/Lib/shutil/__init__.py @@ -1648,3 +1648,60 @@ def __getattr__(name): ) return RuntimeError raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + +def main(): + import argparse + + description = 'A simple command-line interface for the shutil module.' + parser = argparse.ArgumentParser(description=description) + + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-c', '--copy', nargs=2, + metavar=('', ''), + help="Copy a file") + group.add_argument('-c', '--copy2', nargs=2, + metavar=('', ''), + help="Copy a file, preserving metadata") + group.add_argument('-m', '--move', nargs=2, + metavar=('', ''), + help="Move a file or directory") + group.add_argument('-r', '--rmtree', + metavar='', + help="Remove a directory tree") + group.add_argument('-C', '--copytree', nargs=2, + metavar=('', ''), + help="Recursively copy a directory") + group.add_argument('-a', '--make-archive', nargs=3, + metavar=('', '', ''), + help="Create an archive (zip/tar)") + group.add_argument('-x', '--unpack-archive', nargs=2, + metavar=('', ''), + help="Extract an archive") + group.add_argument('-d', '--disk-usage', + metavar='', + help="Show disk usage for a directory") + group.add_argument('-w', '--which', + metavar='', + help="Locate an executable in PATH") + + args = parser.parse_args() + + if args.copy: + copy(*args.copy) + elif args.copy2: + copy2(*args.copy2) + elif args.move: + move(*args.move) + elif args.rmtree: + rmtree(args.rmtree) + elif args.copytree: + copytree(*args.copytree) + elif args.make_archive: + make_archive(*args.make_archive) + elif args.unpack_archive: + unpack_archive(*args.unpack_archive) + elif args.disk_usage: + usage = disk_usage(args.disk_usage) + print(f"Total: {usage.total}, Used: {usage.used}, Free: {usage.free}") + elif args.which: + print(which(args.which)) \ No newline at end of file diff --git a/Lib/shutil/__main__.py b/Lib/shutil/__main__.py new file mode 100644 index 00000000000000..878197ea700cc8 --- /dev/null +++ b/Lib/shutil/__main__.py @@ -0,0 +1,4 @@ +from . import main + +if __name__ == "__main__": + main() \ No newline at end of file