You're using the wrong arguments when shell=True.
See https://docs.python.org/2/library/subprocess.html
When you're using shell=True, the first argument isn't a list of string arguments, but the command as a string:
grepOut = subprocess.check_output("grep 'hello' tmp", shell=True)
should work.
You only need to use the list form when not specifying shell=True, so alternatively:
grepOut = subprocess.check_output(['grep', "'hello'", 'tmp'])
should also work.