The <(head tmp) syntax is a bash function called process overriding. Basic / portable /bin/sh does not support it. (This is true even on systems where /bin/sh and /bin/bash are the same program, but do not allow this function when called as a simple /bin/sh , so you will not accidentally depend on a non-portable function.)
>>> subprocess.Popen(["/bin/bash", "-c", "cat <(head tmp)"]) <subprocess.Popen object at 0x1004cca50>
source share