[python-nmap](https://bitbucket.org/xael/python-nmap) might be cleaner than calling nmap via a subprocess. Though [in the main file](https://bitbucket.org/xael/python-nmap/src/default/nmap/nmap.py) we see that python-nmap is also using subprocess, albeit a bit better I guess.