New ideas: as your "OS" doesn't do that much, your possibilities are pretty limitless (and it can be interesting just "faking it in Python"). You can start emulating what an OS actually does, for example data storage.
If you stick to files/dirs, think out a scheme onfor representing directories and files as entities/objects/values, connect this with the dir command, then add a type command (display contents of a file).
Perhaps add a notion of "special" files/dirs, that are not actually stored, but their contents are computed by some code (make it easy to register a function as an entry in the filesystem). Bang, you have "device drivers").
Or leave/upgrade the DOS theme and figure out how you would best like to approach storing/accessing data, ie. database that stores data and associated set of tags that are used to store "system" tags (name, content type, create date, permissions, whatever...) as well as arbitrary user tags. Think out a way of how to index your tags for fast search, think about ways how to efficiently search for/uniquely identify file in absence of directories (as always, it's a tradeoff).
Find some persistence scheme for files (and directories, if applicable) - save it all into a yaml file or db, map to real directory on the disk, whatever, as long as it works.
Consider "versioning" - storing multiple versions of the same file - and a method of "addressing" different versions of a file.
Add support for running Python scripts from your simulated files.
Think out how scripts could return some interesting values, and how would you pass them from one script to another, or to the "shell", if there are no (more) redirections.
Oh, and if you won't consider it premature optimization, remove those sleeps from your code, and it will start to get slow enough on its own, as you add more functionality.