If this went under full review here, purely on the code (have no OSX anymore so cannot really comment on functionality but it does seem to do what it's supposed to):
- deal with errors: you're printing when deltree starts, but when something goes wrong nothing is printed so that output is kinda useless. That 'pass' in the except block should actually do something. In run() on the other hand, you are printing when something gets deleted, but there's no error handling.
- use os.path.join instead of manually concatenating paths, avoid duplication and use a variable to hold the concatenated path
- 'run' is a super generic name, could be better. But definitely add an argument so the user can choose the directry to run in, relying on working directory is a mess. If you really want it you can still default the argument to '.'
- eventually merge loop/filter like for (file for file in os.listdir() if file.startswith('._')):, that's one less indent level for the loop
- fix inconsistencies in whitespace and use of quotes for strings